1697-s1 성공
This commit is contained in:
44
workbook_8708/1697-s1.py
Normal file
44
workbook_8708/1697-s1.py
Normal file
@@ -0,0 +1,44 @@
|
|||||||
|
# 숨바꼭질
|
||||||
|
|
||||||
|
import sys
|
||||||
|
from collections import deque
|
||||||
|
|
||||||
|
input = sys.stdin.readline
|
||||||
|
|
||||||
|
def solution():
|
||||||
|
n, k = map(int, input().rstrip().split())
|
||||||
|
|
||||||
|
max_len = 100000
|
||||||
|
line = [0 for _ in range(max_len+1)]
|
||||||
|
move = [-1, 1]
|
||||||
|
|
||||||
|
q = deque([n])
|
||||||
|
line[n] = 1
|
||||||
|
|
||||||
|
while q:
|
||||||
|
now = q.popleft()
|
||||||
|
for m in move:
|
||||||
|
now_move = now + m
|
||||||
|
if 0 <= now_move < max_len+1 and line[now_move] == 0:
|
||||||
|
q.append(now_move)
|
||||||
|
line[now_move] = line[now] + 1
|
||||||
|
if 0 <= now*2 < max_len+1 and line[now*2] == 0:
|
||||||
|
q.append(now*2)
|
||||||
|
line[now*2] = line[now] + 1
|
||||||
|
|
||||||
|
print(line[k]-1)
|
||||||
|
|
||||||
|
return
|
||||||
|
|
||||||
|
|
||||||
|
solution()
|
||||||
|
|
||||||
|
"""
|
||||||
|
걸린 시간: 몰라
|
||||||
|
|
||||||
|
시간 복잡도: 한 지점 당 큐에 한 번씩만 들어갔다가 나오기 때문에 전체 지점만큼의 시간이 걸린다. 따라서 O(100000)이다.
|
||||||
|
|
||||||
|
해설: 특정 위치를 볼 때 그 위치로부터 //2, -1, +1 지점에서 +1 한 것들과 기존 지점까지 총 4개 값의 최소값을 가져오면서 dp 테이블을
|
||||||
|
갱신하면 될 것 같았는데, 이렇게 되면 dp 테이블을 채우는 방향에 따라 비교해야하는 4지점이 다 안 채워진 경우가 있다.
|
||||||
|
따라서 bfs로 한번 이동하는 것을 하나의 계층으로 생각해서 진행하면 된다.
|
||||||
|
"""
|
||||||
Reference in New Issue
Block a user