chldkato

백준 1697 숨바꼭질 (파이썬) 본문

백준

백준 1697 숨바꼭질 (파이썬)

chldkato 2020. 2. 16. 21:18

https://www.acmicpc.net/problem/1697

 

1697번: 숨바꼭질

문제 수빈이는 동생과 숨바꼭질을 하고 있다. 수빈이는 현재 점 N(0 ≤ N ≤ 100,000)에 있고, 동생은 점 K(0 ≤ K ≤ 100,000)에 있다. 수빈이는 걷거나 순간이동을 할 수 있다. 만약, 수빈이의 위치가 X일 때 걷는다면 1초 후에 X-1 또는 X+1로 이동하게 된다. 순간이동을 하는 경우에는 1초 후에 2*X의 위치로 이동하게 된다. 수빈이와 동생의 위치가 주어졌을 때, 수빈이가 동생을 찾을 수 있는 가장 빠른 시간이 몇 초 후인지

www.acmicpc.net

1. 수빈이가 있는 위치를 bfs에 입력한다

2. 현재 위치에서 주어진 조건에 맞춰 갈 수 있는 점을 구하고 이동할 수 있으면 큐에 넣는다

3. 동생의 위치에 도달하면 시간을 출력

from collections import deque

def bfs():
    while q:
        x = q.popleft()
        if x == k:
            print(c[k]-1)
            exit()
        if x*2 < limit:
            if c[x*2] == 0:
                q.append(x*2)
                c[x*2] = c[x] + 1
        if x-1 >= 0:
            if c[x-1] == 0:
                q.append(x-1)
                c[x-1] = c[x] + 1
        if x+1 < limit:
            if c[x+1] == 0:
                q.append(x+1)
                c[x+1] = c[x] + 1

limit = 200001
n, k = map(int, input().split())
c = [0 for _ in range(limit)]
c[n] = 1
q = deque()
q.append(n)
bfs()

Comments