[Python][프로그래머스][Level3] 기둥과 보 설치

[Python][프로그래머스][Level3] 기둥과 보 설치

코드

def check(x,y,a,frame):
    if a: # 보
        if [x,y-1,0] in frame or [x+1,y-1,0] in frame
        or ([x-1,y,1] in frame and [x+1,y,1] in frame):
            return True
    else: # 기둥
        if y==0 or [x,y-1,0] in frame
        or [x,y,1] in frame
        or [x-1,y,1] in frame:
            return True
    return False

def solution(n, build_frame):
    # [x,y,a,b] a=0,1 기둥, 보  b=0,1 삭제, 설치
    frame=[]
    for x,y,a,b in build_frame:
        if b:
            if check(x,y,a,frame):
                frame.append([x,y,a])
        else:
            frame.remove([x,y,a])
            for xx,yy,aa in frame:
                if not check(xx,yy,aa,frame):
                    frame.append([x,y,a])
                    break
    return sorted(frame)

frame에 설치된 기둥은 [x,y,0] 보는 [x,y,1]로 저장된다.

x,y 좌표에 설치할 수 있는지 확인해서 조건에 맞게 기둥과 보를 설치한다.

삭제의 경우는 삭제하고 모든 frame 중에 조건에 맞지 않는 기둥이나 보가 있다면

삭제할 수 없는 기둥과 보 이므로 넘어간다.

이런 과정을 반복하면 된다.

Discussion and feedback