백준 1697 숨바꼭질

전.py / / 2020. 12. 13. 00:34
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
  • 네이버 블러그 공유하기
  • 네이버 밴드에 공유하기
  • 페이스북 공유하기
  • 카카오스토리 공유하기