[Programmers/프로그래머스] 2020 KAKAO BLIND RECRUITMENT [코딩테스트]
- [Lv. 2] 문자열 압축
- [Lv. 2] 괄호 변환
- [Lv. 3] 자물쇠와 열쇠
- [Lv. 4] 가사 검색
- [Lv. 3] 기둥과 보 설치
- [Lv. 3] 외벽 점검
- [Lv. 3] 블록 이동하기
📌 문제


📝 제한사항

💻 입출력 예

📖 입출력 예에 대한 설명

📌 풀이
📖 해설
# Pseudo 코드
def possible(answer):
for x, y, a in answer: # 모든 구조물[가로좌표, 세로좌표, 구조물]에 대해
if a == 0: # 기둥 설치조건 확인
if y == 0: continue # 현재 기둥이 바닥 위에 있으면 continue
elif [x, y, 1] in answer: continue # 현재 기둥이 보의 왼쪽 끝에 있으면 continue
elif [x - 1, y, 1] in answer: continue # 현재 기둥이 보의 오른쪽 끝에 있으면 continue
elif [x, y - 1, 0] in answer: continue # 현재 기둥이 다른 기둥 위에 있으면 continue
else: return False # 현재 기둥이 위의 어느것도 해당되지 않으면 return False
if a == 1: # 보 설치조건 확인
if [x, y - 1, 0] in answer: continue # 현재 보의 왼쪽 끝이 기둥 위에 있으면 continue
elif [x + 1, y - 1, 0] in answer: continue # 현재 보의 오른쪽 끝이 기둥 위에 있으면 continue
elif [x - 1, y, 1] in answer: # 현재 보의 왼쪽 끝이 다른 보와 연결되어 있고
if [x + 1, y, 1] in answer: # 현재 보의 오른쪽 끝이 다른 보와 연결되어 있으면
continue # continue
else: return False # 현재 보가 위의 어느것도 해당되지 않으면 return False
return True # 모든 구조물이 설치조건을 만족하면 return True
💻 전체코드
def possible(answer):
for x, y, architecture in answer:
if architecture == 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
if architecture == 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 x, y, a, b in build_frame:
if b == 0:
answer.remove([x, y, a])
if not possible(answer):
answer.append([x, y, a])
if b == 1:
answer.append([x, y, a])
if not possible(answer):
answer.remove([x, y, a])
return sorted(answer)