[Programmers] P60061 기둥과 보 설치
[Programmers] P60061 기둥과 보 설치
Question
Language: Python
build_frame을 통해 주어진 건축 시공 과정에 따라, 건축할 수 있으면, 건축하고, 그렇지 않은 경우 해당 과정을 무시하면서 건축을 이어나간다.
- 해당 시공이 설치인지/삭제인지에 따라 경우를 나눠서 생각한다.
- 설치이면, 설치해보고 조건에 부합하면 그대로 놔두고, 부합하지 않으면 설치했던 것을 원복한다.
- 삭제인 경우도 비슷하게 고려한다.
- 조건에 부합하는 지 여부를 조사하는 부분은 문제에 주어진 보/기둥의 조건에 따라 구현하면 된다.
Solution
def check_if_true(answer):
for x,y,building in answer:
#기둥인 경우
if building==0:
#바닥에 위에 있는 경우
if y==0:
continue
#보의 한쪽 끝 위에 있는 경우
elif [x-1,y,1] in answer or [x,y,1] in answer:
continue
#기둥 위에 있는 경우
elif [x,y-1,0] in answer:
continue
else:
return False
#보인 경우
elif building==1:
#보의 한쪽 끝에 기둥이 있는 경우
if [x,y-1,0] in answer or [x+1,y-1,0] in answer:
continue
#보로 둘러쌓인 경우
elif [x-1,y,1] in answer and [x+1,y,1] in answer:
continue
else:
return False
return True
def solution(n, build_frame):
answer = []
for x,y,building,option in build_frame:
#설치
if option:
answer.append([x,y,building])
if not check_if_true(answer):
answer.remove([x,y,building])
#삭제
else:
answer.remove([x,y,building])
if not check_if_true(answer):
answer.append([x,y,building])
answer.sort()
return answer
댓글남기기