- Notifications
You must be signed in to change notification settings - Fork 846
/
Copy path6.py
28 lines (27 loc) · 1.65 KB
/
6.py
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
# 현재 설치된 구조물이 '가능한' 구조물인지 확인하는 함수
defpossible(answer):
forx, y, stuffinanswer:
ifstuff==0: # 설치된 것이 '기둥'인 경우
# '바닥 위' 혹은 '보의 한쪽 끝 부분 위' 혹은 '다른 기둥 위'라면 정상
ify==0or [x-1, y, 1] inansweror [x, y, 1] inansweror [x, y-1, 0] inanswer:
continue
returnFalse# 아니라면 거짓(False) 반환
elifstuff==1: # 설치된 것이 '보'인 경우
# '한쪽 끝부분이 기둥 위' 혹은 '양쪽 끝부분이 다른 보와 동시에 연결'이라면 정상
if [x, y-1, 0] inansweror [x+1, y-1, 0] inansweror ([x-1, y, 1] inanswerand [x+1, y, 1] inanswer):
continue
returnFalse# 아니라면 거짓(False) 반환
returnTrue
defsolution(n, build_frame):
answer= []
forframeinbuild_frame: # 작업(frame)의 개수는 최대 1,000개
x, y, stuff, operate=frame
ifoperate==0: # 삭제하는 경우
answer.remove([x, y, stuff]) # 일단 삭제를 해본 뒤에
ifnotpossible(answer): # 가능한 구조물인지 확인
answer.append([x, y, stuff]) # 가능한 구조물이 아니라면 다시 설치
ifoperate==1: # 설치하는 경우
answer.append([x, y, stuff]) # 일단 설치를 해본 뒤에
ifnotpossible(answer): # 가능한 구조물인지 확인
answer.remove([x, y, stuff]) # 가능한 구조물이 아니라면 다시 제거
returnsorted(answer) # 정렬된 결과를 반환