diff --git a/workbook_8708/1697-s1.py b/workbook_8708/1697-s1.py new file mode 100644 index 0000000..e5a05f2 --- /dev/null +++ b/workbook_8708/1697-s1.py @@ -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로 한번 이동하는 것을 하나의 계층으로 생각해서 진행하면 된다. +""" \ No newline at end of file