Python/구현
[2020KAKAO][Python] 기둥과 보 설치
Mr_Chu
2020. 9. 12. 01:24
programmers.co.kr/learn/courses/30/lessons/60061
코딩테스트 연습 - 기둥과 보 설치
5 [[1,0,0,1],[1,1,1,1],[2,1,0,1],[2,2,1,1],[5,0,0,1],[5,1,0,1],[4,2,1,1],[3,2,1,1]] [[1,0,0],[1,1,1],[2,1,0],[2,2,1],[3,2,1],[4,2,1],[5,0,0],[5,1,0]] 5 [[0,0,0,1],[2,0,0,1],[4,0,0,1],[0,1,1,1],[1,1,1,1],[2,1,1,1],[3,1,1,1],[2,0,0,0],[1,1,1,0],[2,2,0,1]] [[
programmers.co.kr
def possible(answer):
for x, y, a in answer:
if a == 0: # 기둥일때
# 바닥 위, 보의 한쪽 끝 부분 위, 다른 기둥 위
if y == 0 or [x-1,y,1] in answer or [x,y,1] in answer or [x,y-1,0] in answer:
continue
return False
elif a == 1: # 보일때
# 보의 한쪽 끝부분이 기둥 위, 양쪽 끝부분이 보와 연결
if [x,y-1,0] in answer or [x+1,y-1,0] in answer or ([x-1,y,1] in answer and [x+1,y,1] in answer):
continue
return False
return True
def solution(n, build_frame):
answer = []
for frame in build_frame:
x,y,a,b = frame
if b == 0: # 삭제일때
answer.remove([x,y,a]) # 삭제해보고
if not possible(answer): # False면
answer.append([x,y,a]) # 다시 설치
if b == 1: # 설치일때
answer.append([x,y,a]) # 설치해보고 안되면 다시 삭제
if not possible(answer):
answer.remove([x,y,a])
print(sorted(answer))
return sorted(answer)
★idea : 설치와 삭제시 먼저 해보고 안되면 remove와 append로 다시 삭제/설치를 하는 판단