https://programmers.co.kr/learn/courses/30/lessons/60061
조건이 너무 많아져서 이건 아닌 것 같아서 다른 분 아이디어를 참고해서 코드를 작성했다.
애초에 조건을 따져가며 추가 및 삭제하지 말고 일단 실행한 후에 올바른 상태인지 확인하고 되돌리면 된다.
발상을 조금만 바꿔도 코드가 엄청나게 간단해지는 점이 참 매력 있는 것 같다.
def impossible(answer):
column , girder = 0, 1
for a in answer:
x, y, item = a
if item == column:
# 기둥
if y != 0 and (x,y-1,column) not in answer and (x-1,y,girder) not in answer and (x,y,girder) not in answer:
return True
else:
# 보
if (x,y-1,column) not in answer and (x+1,y-1,column) not in answer and not ((x-1,y,girder) in answer and (x+1,y,girder) in answer):
return True
return False
def solution(n, build_frame):
answer = set()
for frame in build_frame:
x, y, item, how = frame
if how == 1:
# 설치
answer.add((x,y,item))
if impossible(answer):
answer.remove((x,y,item))
else:
# 제거
answer.remove((x,y,item))
if impossible(answer):
answer.add((x,y,item))
return sorted(list(answer), key = lambda x: (x[0],x[1],x[2]))
추가로 set에 여러 친구들을 넣을 때에는 튜플 형식만 가능하다.
'Programming > Programmers' 카테고리의 다른 글
[프로그래머스] 징검다리 건너기 (Python) (0) | 2021.11.16 |
---|---|
[프로그래머스] 길 찾기 게임 (Python) (0) | 2021.11.15 |
[프로그래머스] 풍선 터트리기 (Python) (0) | 2021.11.14 |
[프로그래머스] 최고의 집합 (Python) (0) | 2021.11.13 |
[프로그래머스] 줄 서는 방법 (Python) (0) | 2021.11.13 |
댓글