0%

BOJ 1697

Input

Default

  • 런타임에러 방지를 위해 sys.stdinsys.stdout 을 이용한다.

첫 번째 줄에 수빈이가 있는 위치 N과 동생이 있는 위치 K가 주어진다. N과 K는 정수이다.

1
2
3
import sys

N, K = map(int, sys.stdin.readline().split())

BFS

  • 이진 탐색 그래프에서 가장 얕은 깊이를 출력하면 됨 == BFS
1
2
3
4
5
def bfs():
queue = [N]

while queue:
now = queue.pop(0)
  • now == K 일 때, 해당 깊이를 출력하면 됨
1
2
3
if now == K:
sys.stdout.write(str(cnt[now]))
return
  • 그래프를 그리며 경우의 수를 파악하였지만, 모든 경우에 대하여 bfs 하는 것을 생각하지 못함
    • now-1, now+1, 2*now
  • 주어진 범위에 따라 범위 내의 값인지 파악하고
  • 한 단계 더 깊어질 경우 깊이 == 현재의 높이+1 이므로, cnt += 1 을 시행한다.
  • 이를 위해 0으로 초기화된 범위 만큼의 배열을 생성한다.
1
cnt = [0]*100001
1
2
3
4
for next in (now-1, now+1, 2*now):
if 0 <= next <= 100000 and not cnt[next]:
queue.append(next)
cnt[next] = cnt[now]+1

Output

수빈이가 동생을 찾는 가장 빠른 시간을 출력한다.

1
2
3
if now == K:
sys.stdout.write(str(cnt[now]))
return