프로그래머스, 2020 카카오 공채 코딩테스트 기출 - 기둥과 보 설치 LV3
https://programmers.co.kr/learn/courses/30/lessons/60061
기둥, 혹은 보를 설치/제거 한후 설치된 모든 기둥과 보들이 주어진 조건에 맞게 설치되어 있는지 확인한다.
1) 맨 밑에 있는 경우
2) 설치 아래 지점에 기둥이 있는 경우
3) 설치 왼쪽 지점에 보가 있는 경우
4) 설치 지점에 보가 있는 경우
-> 모든 조건을 만족하지 않으면 설치 불가능
1) 설치 아래 지점에 기둥이 있는 경우
2) 설치 아래 오른쪽 지점에 기둥이 있는 경우
3) 양 옆에 보가 있는 경우
-> 모든 조건을 만족하지 않으면 설치 불가능
처음에는 check 함수의
if y == 0 or [x-1, y, 1] in answer or [x, y, 1] in answer or [x, y-1, 0] in answer
문을 True 로 return 했는데 for 문을 돌고 있기 때문에 하나라도 만족하면 True 가 되어 버렸다.
반복문으로 모든 보와 기둥을 체크 해야하므로 continue
를 써줘야 한다.
def check(answer):
for frame in answer:
x, y, a = frame
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
else:
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
else:
return False
return True
def solution(n, build_frame):
answer = []
for f in build_frame:
x, y, what, how = f
if how == 1: # 설치
answer.append([x, y, what])
if check(answer) is False:
answer.remove([x, y, what])
else: # 삭제
answer.remove([x, y, what])
if check(answer) is False:
answer.append([x, y, what])
answer.sort()
print(answer)
return answer
solution(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]])