백준 문제풀이

12851 - 숨바꼭질 2 / gold 4 / BFS

RonLee 2022. 11. 17. 19:45
"""
12851 - 숨바꼭질 2 / gold 4 / BFS
"""
import sys
from collections import deque

input = sys.stdin.readline


n, k = map(int, input().split())
# 2차원 배열 활용 info[n][0] , info[n][1]
# info[n][0]: 가장 빠른 시간 , info[n][1]: 가장 빠른 시간으로 찾은 방법 개수
info = [[-1, 0] for _ in range(100001)]

que = deque([n])
info[n][0] = 0
info[n][1] = 1

while que:
    flag = que.popleft()

    for point in [flag * 2, flag + 1, flag - 1]:
        if 0 <= point <= 100000:
            # 처음으로 접근 했을 경우
            if info[point][0] == -1:
                info[point][0] = info[flag][0] + 1
                info[point][1] = info[flag][1]
                que.append(point)
            # 처음이 아닌 경우 + 가장 빠른 시간과 같은지
            elif info[point][0] == info[flag][0] + 1:
                info[point][1] += info[flag][1]

print(info[k][0])
print(info[k][1])