Study & Project ✏️/프로그래머스 PCCP 공부 📅

[프로그래머스] BFS 복습 및 실습문제(송아지 찾기) 풀이 - 파이썬

JM 2022. 11. 12. 18:12
반응형

📖 문제

현수는 송아지를 잃어버렸습니다. 다행히 송아지에는 위치추적기가 달려 있습니다. 현수의 위치와 송아지의 위치가 수직선 상의 좌표 점으로 주어지면 현수는 현재 위치에서 송아지의 위치까지 다음과 같은 방법으로 이동합니다. 송아지는 움직이지 않고 제자리에 있습니다.

현수는 스카이 콩콩을 타고 가는데 한 번의 점프로 앞으로 1, 뒤로 1, 앞으로 5를 이동할 수 있다. 현수의 위치 s와 송아지의 위치 e가 주어지면 최소 몇 번의 점프로 현수가 송아지의 위치까지 갈 수 있는지 구하는 프로그램을 작성하세요. 최소 점프의 횟수는 1 이상입니다.

 

[제한사항]

- 수직선 상의 좌표는 1부터 10,000까지입니다.
- s와 e는 같은 값으로 입력되지 않습니다.

 

📃 코드

from collections import deque

# s = 5
# e = 14
# result = 3

def solution(s, e):
    answer = 0
    ch = [0]*10001
    dQ = deque()
    dQ.append(s)
    ch[s] = 1
    L = 0
    
    while(dQ):
        # length = deque's length
        length = len(dQ)
        for _ in range(length):
            # select graph's level Node
            x = dQ.popleft()
            # break case (later)
            # if x == e:
            #     return L
            # each case
            for nx in [x-1,x+1,x+5]:
                # break case (before)
                if nx == e:
                    return L+1
                if 0< nx <= 10000 and ch[nx] == 0:
                    ch[nx] = 1
                    dQ.append(nx)
        # level update
        L += 1
    return answer

 

🗝️ 요약

[개념]

BFS의 개념을 단순하게 생각만 하는 게 아니라 그림으로 표현해서 간단하게 생각할 수 있으면 쉬울 것 같다.

BFS는 골고루 패는 것.

BFS는 deque를 사용한다.

[활용]
BFS의 대표적 문제 유형: 경로탐색(최단거리, 시간), 네트워크(연결), 조합(모든 조합 만들기)