https://programmers.co.kr/learn/courses/30/lessons/60061?language=python3
Solution
def check(answer):
for i in answer:
flag = False
x, y, structure = i[0], i[1], i[2]
# 기둥(0)
if structure == 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
# 보(1)
else:
if [x, y-1, 0] in answer or [x+1, y-1, 0] in answer:
continue
if [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 i in build_frame:
x, y, structure, setting = i[0], i[1], i[2], i[3]
# 설치
if setting == 1:
answer.append([x, y, structure])
if not check(answer):
answer.remove([x, y, structure])
# 삭제
else:
answer.remove([x, y, structure])
if not check(answer):
answer.append([x, y, structure])
#print(answer)
answer = sorted(answer)
return answer
시뮬레이션 문제이다.
설치할 때는 먼저 answer에 해당 구조물을 넣고, check에서 answer에 있는 모든 구조물들이 조건에 맞는지 확인한다. 똑같이 삭제할 때는 answer에서 구조물을 삭제해보고, check에서 조건을 확인한다.
# 설치
if setting == 1:
answer.append([x, y, structure])
if not check(answer):
answer.remove([x, y, structure])
# 삭제
else:
answer.remove([x, y, structure])
if not check(answer):
answer.append([x, y, structure])
기둥일 경우의 조건은 다음과 같고 차례대로 검사하면 아래와 같다.
- 바닥 위에 있을 때
- 보의 한쪽 끝 부분에 있을 때
- 다른 기둥 위에 있을 때
if structure == 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
보일 경우의 조건은 다음과 같고 차례대로 검사하면 아래와 같다.
- 한쪽 끝 부분이 기둥 위에 있을 때
- 양쪽 끝 부분이 다른 보와 동시에 연결되어 있을 때
else:
if [x, y-1, 0] in answer or [x+1, y-1, 0] in answer:
continue
if [x-1, y, 1] in answer and [x+1, y, 1] in answer:
continue
return False
'Algorithm > 프로그래머스' 카테고리의 다른 글
[프로그래머스] 가사 검색 / Python / 2020 KAKAO BLIND RECRUITMENT (0) | 2020.10.04 |
---|---|
[프로그래머스] 경주로 건설 / Python / 2020 카카오 인턴십 (0) | 2020.08.31 |
[프로그래머스] 징검다리 건너기 / Python / 2019 카카오 겨울 인턴십 (0) | 2020.08.04 |
[프로그래머스] 보석쇼핑 / Python / 2020 카카오 인턴십 (0) | 2020.07.30 |
[프로그래머스] 수식 최대화 / Python / 2020 카카오 인턴십 (0) | 2020.07.10 |
,