📖 문제
🧑🏻💻 풀이 과정
1) 문제 이해 및 접근
초기에 2차원 배열을 생성하여 구조물을 설치하려 하였습니다. 그리하여 설치 또는 제거시 구조물들이 모든 조건에 해당하는지 확인하려 하였으나, 조건이 너무 까다로워 어려움을 겪었습니다.
조금 더 간단한 방법을 생각하여 집합을 이용하여 설치한 구조물들만 반복하며 조건을 확인하도록 하였습니다.
2) 알고리즘
- 구현
3) 풀이 코드
사용 언어 - Python
def solution(n, build_frame):
built = set()
def is_right():
for b in built: # 모든 구조물 탐색
x, y, a = b # x, y 좌표, a-0: 기둥, 1: 보
if not a: # 현재 구조물이 기둥이라면
if y and (x, y-1, 0) not in built and ((x, y, 1) not in built and (x-1, y, 1) not in built): # 조건에 해당하지 않으면
return False
else: # 현재 구조물이 보라면
if ((x, y-1, 0) not in built and (x+1, y-1, 0) not in built) and ((x-1, y, 1) not in built or (x+1, y, 1) not in built): # 조건에 해당하지 않으면
return False
return True # 모든 조건에 충족할 경우 True 반환
for info in build_frame:
x, y, a, b = info # x, y 좌표, a-0: 기둥, 1: 보, b-0:삭제, 1: 설치
if not b: # 삭제한다면
built.remove((x, y, a)) # 삭제 실행
if not is_right(): # 조건에 충족하지 않으면, 다시 설치
built.add((x, y, a))
else: # 설치한다면
built.add((x, y, a)) # 설치 실행
if not is_right(): # 조건에 충족하지 않으면, 다시 제거
built.remove((x, y, a))
return sorted(built)
📝 결과 및 학습한 내용
1) 어려웠던 내용
문제의 조건이 다소 불명확하게 주어져 어려움을 겪었습니다.
조건문의 경우가 너무 많아서 어려움을 겪었습니다.
2) 새롭게 학습한 내용
특별히 없습니다.
🔗 문제 링크
- https://programmers.co.kr/learn/courses/30/lessons/60061
※ 오류 및 오타, 다른 의견이 있는 경우 댓글을 남겨주시면 감사하겠습니다
'알고리즘 문제풀이 > Python' 카테고리의 다른 글
[백준] 1774 우주신과의 교감 (0) | 2022.03.09 |
---|---|
[백준] 12015 가장 긴 증가하는 부분 수열 2 (0) | 2022.03.08 |
[프로그래머스] n진수 게임 (0) | 2022.03.06 |
[프로그래머스] 메뉴 리뉴얼 (0) | 2022.03.05 |
[백준] 1002 터렛 (0) | 2022.03.04 |
댓글