[이코테] 구현 - 기둥과 보 설치 with 파이썬

JIN KANG·2022년 10월 11일
0

이코테

목록 보기
12/29
post-thumbnail

1. 문제

  • 프로그래머스 문제와 동일
  • 조건에 맞게 건물을 지을 수 있는지 시뮬레이션 할 수 있는 프로그램을 만들기
  • 조건
    • 기둥은 바닥위에 있거나, 보의 한쪽 끝 부분 위에 있거나, 또는 다른 기둥 위에 있어야 한다.
    • 보는 한쪽 끝 부분이 기둥 위에 있거나, 또는 양쪽 끝 부분이 다른 보와 동시에 연결되어 있어야 한다.

제한 사항 및 입출력 예

2. 아이디어

  • 문제 조건에 맞게 구현하면 된다.
  • 순차적으로 작업을 하나씩 진행하면서(설치하거나 제거하면서), 그때마다 조건에 맞는지 확인한다.

3. 예제코드

def is_possible(result):
        # 설치 가능 여부 
        # 기둥, 보, 
        # 기둥은, 바닥에 있거나, 보의 한쪽 끝부분 위에 있거나, 다른 기둥 위에 있거나
        # 보는 한쪽 끝 부분이 기둥 위에 있거나, 또는 양쪽 끝 부분이 다른 보와 동시에 연결
        for x,y, stuff in result:
            if stuff == 0 : # 기둥이면,
                if y == 0 or [x-1,y,1] in result or \
                [x,y,1] in result or [x,y-1,0] in result:
                    continue 
                return False
            elif stuff == 1 : # 보이면,
                if [x, y-1, 0] in result or [x+1, y-1, 0] in result or\
                ([x-1, y, 1] in result and [x+1,y,1] in result) :
                    continue
                return False
        return True

def solution(n, build_frame):
    # 설치 or 제거 
    # 설치면 설치하고, 테스트하고, 아니면 제거하고
    answer = []
    for x,y,stuff,setup in build_frame:
        if setup == 1: # 설치면
            answer.append([x,y,stuff])  # 설치하고
            if not is_possible(answer) :  # 가능하지 않으면, 
                answer.remove([x,y,stuff])
                    
    # 제거면, 제거하고, 테스트하고, 아니면 다시붙이고
        if setup == 0 : # 제거면 
            answer.remove([x,y,stuff])  # 제거하고
            if not is_possible(answer):
                answer.append([x,y,stuff])
    return sorted(answer)

4. 배운점

  • 리스트안에 요소가 있는지 확인하는 것과 remove를 다시 상기할 수 있었다.

참조

  • 이것이 취업을 위한 코딩테스트다. with 파이썬
profile
성장하는 데이터 분석가

0개의 댓글