본문 바로가기
PS/solved.ac

[CLASS 4]백준 13549번 - 숨바꼭질 3

by DawIT 2021. 3. 29.
320x100

13549번 : 숨바꼭질 3

 

숨바꼭질 2에서 좀 힘들었던 경험이 있어서 3은 더 어렵지 않을까 걱정했지만 오히려 엄청 쉽게 풀 수 있었다. 이 문제에서 특이한 점은 순간이동은 시간을 소비하지 않는다는 것이다.

 

BFS를 수행하되 어떤 점에서 2배를 계속 하면서 큐에 한번에 다 추가해 주어야 한다. 그래야 큐 안에 시간이 2초 이상 차이나는 경로가 추가되지 않는다.

 

내 코드:

# dawitblog.tistory.com
from collections import deque

n,k = map(int,input().split())
if n >= k:
    print(n-k)
    exit()
limit = 2*k-n

q = deque([(n,0)])
visited = [False] * (limit+1)
visited[n] = True

while q:
    now, time = q.popleft()

    if now == k:
        print(time)
        exit()
	
    # 순간이동으로 갈 수 있는 곳 한번에 모두 추가
    tel = now * 2
    while 0 < tel <= limit and not visited[tel]:
        visited[tel] = True
        q.append((tel,time))
        tel *= 2
    
    b = now - 1
    if 0 <= b <= limit and not visited[b]:
        visited[b] = True
        q.append((b,time+1))
    
    f = now + 1
    if 0 <= f <= limit and not visited[f]:
        visited[f] = True
        q.append((f,time+1))

'PS > solved.ac' 카테고리의 다른 글

[CLASS 4]백준 14502번 - 연구소  (0) 2021.04.26
[CLASS 4]백준 13172번 - Σ  (0) 2021.04.25
[CLASS 4]백준 12865번 - 평범한 배낭  (0) 2021.03.26
[CLASS 4]백준 12851번 - 숨바꼭질 2  (0) 2021.03.25
[CLASS 4]백준 9663번 - N-Queen  (0) 2021.03.23

댓글