13549번: 숨바꼭질 3

수빈이는 동생과 숨바꼭질을 하고 있다. 수빈이는 현재 점 N(0 ≤ N ≤ 100,000)에 있고, 동생은 점 K(0 ≤ K ≤ 100,000)에 있다. 수빈이는 걷거나 순간이동을 할 수 있다. 만약, 수빈이의 위치가 X일

www.acmicpc.net


BFS를 사용! 두배한 것은 0초만에 된다는 것이 포인트!

  1. 방문 여부 Check 배열과 담을 queue 배열을 생성한다
  2. 2배는 0초만에 이루어지므로 먼저 계산되어야하므로 queue 앞으로 넣어준다.
  3. +1과 -1 queue 뒤로 넣어준다.
import sys
from collections import deque

input = sys.stdin.readline
N, K = map(int, input().split())
check = [False]*200001
queue = deque([[N, 0]])

def insertque(q, x, c, twice):
    if 0 <= x <=200000 and not check[x]:
        check[x] = True
        if twice:
            q.appendleft([x, c])
        else:
            q.append([x, c])

check[N] = True
answer = 0

while queue:
    pos, cnt = queue.popleft()
    if pos == K:
        answer = cnt
        break
    insertque(queue, 2*pos, cnt, True)
    insertque(queue, pos-1, cnt+1, False)
    insertque(queue, pos+1, cnt+1, False)

print(answer)
  • 네이버 블러그 공유하기
  • 네이버 밴드에 공유하기
  • 페이스북 공유하기
  • 카카오스토리 공유하기