프론트엔드 개발 블로그

[카카오 2020] 기둥과 보 설치

by heeji_

●○

 

[문제] 링크

1. 기둥과 보의 삽입, 삭제 여부와 설치할 위치 정보가 주어진다.

2. 조건에 맞게 삽입, 삭제를 차례로 시뮬레이션할 수 있도록 구현한다.

 

[풀이]

처음 구현한 방법은 기둥, 보를 삽입, 삭제할 때 조건을 확인하고 다 넣어주는 것이었다. 그렇게 했더니 코드가 길어지고 답은 틀리는데 디버깅이 안되서 책보고 다시 짰다.

1. build_frame을 한 줄씩 읽어 기둥인지 보인지, 삽입할 건지 삭제할 건지 확인한다.

2. 삽입이면 append하고 조건에 맞는 설치인지 확인한다. 조건에 맞지 않으면 remove

삭제도 마찬가지로 먼저 remove하고 조건에 맞지 않으면 다시 append

3. 조건에 맞는지 확인하는 코드는 간단하다. 

 

[외울 것]

* [x, y, 0] in answer : 이 구문이 가능하다..세상에 파이썬갓

* list.remove([x, y, a]) : 이 구문이 가능하다. 탐색해서 지우는 것을 생각했는데 그럴 필요 X

* sorted(list)로 간단히 정렬가능

 

[코드]

이코테 책 보고 공부하고 수정한 코드

def ispossible(answer):
    for x, y, a in answer:
        # 기둥 체크
        if a == 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
            else: return False
        # 보 체크
        elif a == 1:
            # 기둥 위
            if [x, y-1, 0] in answer or [x+1, y-1, 0] in answer:
                continue
            # 양 끝이 다른 보와 연결되어 있을 때
            elif [x-1, y, 1] in answer and [x+1, y, 1] in answer:
                continue
            else: return False
    return True

def solution(n, build_frame):
    answer = []
    
    # build_frame의 정보를 보고 answer에 일단 넣는다.
    for info in build_frame:
        x, y, a, b = info
        # 설치
        if b == 1:
            answer.append([x, y, a])
            # 조건에 맞는지 확인
            if ispossible(answer) == False:
                answer.remove([x, y, a])
        # 제거
        if b == 0:
            answer.remove([x, y, a])
            # 조건에 맞는지 확인
            if ispossible(answer) == False:
                answer.append([x, y, a])
    
    return sorted(answer)

'알고리즘 > 프로그래머스' 카테고리의 다른 글

[카카오 2020] 문자열 압축  (0) 2021.05.02
[스택/큐] 기능개발  (0) 2021.04.30
[스택/큐] 주식가격  (0) 2021.04.30

블로그의 정보

아자아자

heeji_

활동하기