728x90
https://www.acmicpc.net/problem/1697
1697번: 숨바꼭질
수빈이는 동생과 숨바꼭질을 하고 있다. 수빈이는 현재 점 N(0 ≤ N ≤ 100,000)에 있고, 동생은 점 K(0 ≤ K ≤ 100,000)에 있다. 수빈이는 걷거나 순간이동을 할 수 있다. 만약, 수빈이의 위치가 X일
www.acmicpc.net
n, k = map(int, input().split()) # 5,17
l = [(0, k)] # ㅣ = [(0,17)]
cnt = 1
if n==k: # n == k 이면 0
print(0)
elif n>k: # n > k 이면 n - k
print(n-k)
else: # n < k 이면
m = set() # 지나간 모든 위치 저장
while 1:
# l 은 모든 경우 17 -> 5
# n 에 도착하면 cnt 출력하고 종료
if l[0][1]-1 == n or l[0][1]+1 == n or l[0][1]//2 == n:
print(cnt)
break
# 지나간 위치가 아니고 -1, +1, //2 값이 l에 없으면 l에 삽입
if l[0][1] not in m and l[0][1]-1 >= 0:
l.append((cnt, l[0][1]-1))
if l[0][1] not in m and l[0][1]+1 >= 0:
l.append((cnt, l[0][1]+1))
if l[0][1] not in m and l[0][1]//2 >=0 and l[0][1]!=0 and l[0][1]%2 == 0:
l.append((cnt, l[0][1]//2))
# l = [(0, 17), (1, 16), (1, 18)] => [(1,16), (1, 18), (2, 15), (2, 17), (2, 8)]
# 지나간 위치 저장후 삭제
m.add(l[0][1])
del l[0] # l = [(1, 16), (1, 18)]
if cnt-1 == l[0][0]: # cnt-1이 l에 없어질 때 까지 반복(위치 변경 횟수)
continue
else: # 없으면 cnt + 1
cnt += 1
반응형
'전.py' 카테고리의 다른 글
백준 1002 터렛 (0) | 2020.12.13 |
---|---|
백준 14888 연산자 끼워넣기 (0) | 2020.12.13 |
백준 14225 부분수열의 합 (0) | 2020.12.13 |
백준 3989 유행성 독감 (실패) (0) | 2020.12.13 |
백준 2740 행렬 곱셈 (0) | 2020.12.13 |