알고리즘

[백준, 1697번] 숨바꼭질

hminor 2023. 8. 15. 10:20

풀이 방식

  • q에 넣어서 하나씩 조사를 하며 방문한거라면 추가하지 않고,
  • 방문하지 않았을 때만 추가하면서, 추가시 방문 표시를 해서 중복으로 추가되지 않도록 하기
  • 그리고 n-1, n+1, n*2 와 그 숫자에 대한 카운팅을 함께 넘겨주기
  • if 문으로 0<=ds<=100000 를 해준 이유는 만들어 둔
     visit 범위를 넘어가면 index 문제가 있어서 조건을 함께 달아 놓음.
from collections import deque
n,k = map(int,input().split())
visit = [0]*100001
visit[n] = 1
q = deque([[n,0]])

while q:
    s,cnt = q.popleft()
    if s == k:
        print(cnt)
        break
    for ds in [s+1, s-1, s*2]:
        if 0<=ds<=100000 and not visit[ds]:
            visit[ds] = 1
            q.append([ds,cnt+1])
 
 

'알고리즘' 카테고리의 다른 글

[백준, 1325번] 효율적인 해킹  (0) 2023.08.18
[백준, 11724번] 연결 요소의 개수  (0) 2023.08.15
[백준, 7576번] 토마토  (0) 2023.08.14
[백준, 2667번] 단지번호붙이기  (0) 2023.08.14
[백준, 2606번] 바이러스  (0) 2023.08.13