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