새로운 블로그로 이전 작업을 진행하고 있어 포스트가 새로 작성되고 있지 않습니다.

빠른 시일 내에 새로운 블로그로 인사드리겠습니다.

새로운 블로그 : https://unho.vercel.app/

본문 바로가기
알고리즘 문제풀이/Python

[프로그래머스] 기둥과 보 설치

by 언호 2022. 3. 7.

📖 문제


🧑🏻‍💻 풀이 과정

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

 

코딩테스트 연습 - 기둥과 보 설치

5 [[1,0,0,1],[1,1,1,1],[2,1,0,1],[2,2,1,1],[5,0,0,1],[5,1,0,1],[4,2,1,1],[3,2,1,1]] [[1,0,0],[1,1,1],[2,1,0],[2,2,1],[3,2,1],[4,2,1],[5,0,0],[5,1,0]] 5 [[0,0,0,1],[2,0,0,1],[4,0,0,1],[0,1,1,1],[1,1,1,1],[2,1,1,1],[3,1,1,1],[2,0,0,0],[1,1,1,0],[2,2,0,1]] [[

programmers.co.kr

 

 

※ 오류 및 오타, 다른 의견이 있는 경우 댓글을 남겨주시면 감사하겠습니다

댓글