BOJ - 1697

주의·2024년 2월 6일
0

boj

목록 보기
188/214

백준 문제 링크
숨바꼭질

❓접근법

  1. BFS를 사용했다.
  2. bfs 함수 내에서
    100001 길이의 0을 가지는 리스트 answer를 만들었다.
  3. 큐가 비어있을 때까지 큐에서 원소(x)를 꺼내준다.
    만약 꺼낸 원소(x)가 k와 같다면 answer[x]를 return한다.
    x가 갈 수 있는 좌표는 [ x -1, x + 1, x * 2 ] 3 가지가 있다.
    이 좌표들이 범위 안에 있고, 아직 방문하지 않았을 때
    이 좌표를 큐에 넣고, answer[좌표] = answer[x] + 1 한다.
  4. bfs(n)을 실행시키면 끝!

👌🏻코드

from collections import deque

n, k = map(int, input().split())

def bfs(x):
    
    queue = deque()
    queue.append(x)
    
    answer = [0] * 100001
    
    while queue:
        x = queue.popleft()
        
        if x == k:
            return answer[x]
        
        for i in [x - 1, x + 1, x * 2]:
            if 0 <= i < 100001:
                if answer[i] == 0:
                    queue.append(i)
                    answer[i] = answer[x] + 1
print(bfs(n))

0개의 댓글