숨바꼭질 성공다국어
한국어
| 시간 제한 | 메모리 제한 | 제출 | 정답 | 맞힌 사람 | 정답 비율 |
|---|---|---|---|---|---|
| 2 초 | 128 MB | 135413 | 38328 | 23945 | 25.017% |
문제
수빈이는 동생과 숨바꼭질을 하고 있다. 수빈이는 현재 점 N(0 ≤ N ≤ 100,000)에 있고, 동생은 점 K(0 ≤ K ≤ 100,000)에 있다. 수빈이는 걷거나 순간이동을 할 수 있다. 만약, 수빈이의 위치가 X일 때 걷는다면 1초 후에 X-1 또는 X+1로 이동하게 된다. 순간이동을 하는 경우에는 1초 후에 2*X의 위치로 이동하게 된다.
수빈이와 동생의 위치가 주어졌을 때, 수빈이가 동생을 찾을 수 있는 가장 빠른 시간이 몇 초 후인지 구하는 프로그램을 작성하시오.
입력
첫 번째 줄에 수빈이가 있는 위치 N과 동생이 있는 위치 K가 주어진다. N과 K는 정수이다.
출력
수빈이가 동생을 찾는 가장 빠른 시간을 출력한다.
예제 입력 1 복사
5 17
예제 출력 1 복사
4
힌트
수빈이가 5-10-9-18-17 순으로 가면 4초만에 동생을 찾을 수 있다.
1. (오답)
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 | from collections import deque N, K = map(int, input().split()) board = [0 for _ in range(200000)] queue = deque() queue.append(N) while queue: x = queue.popleft() # if board[K] > 0: # break dx = [x - 1, x + 1, 2 * x] for i in dx: if 0 <= i < 200000 and not board[i]: board[i] = board[x] + 1 queue.append(i) print(board[K]) | cs |
2. (정답)
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 | from collections import deque N, K = map(int, input().split()) board = [0 for _ in range(200000)] queue = deque() queue.append(N) while queue: x = queue.popleft() # if x == K: # break dx = [x - 1, x + 1, 2 * x] for i in dx: if 0 <= i < 200000 and not board[i]: board[i] = board[x] + 1 queue.append(i) print(board[K]) | cs |
11,12라인 주석 처리 한 부분의 차이인 것 같은데
1번으로 하면 왜 틀린걸까요? BFS인데 테이블 모양이 아니라 감이 안옵니다 ㅠㅠ
댓글 0