IT/백준

[백준] 1697 숨바꼭질(Python)

ziasu 2021. 10. 12. 18:51
반응형

1. 생각 정리

  • 수빈이의 위치에서 동생의 위치까지 무조건 동생과 가까워지는 루트만 따라가면 오히려 시간이 오래 걸릴 수도 있다.
  • 그러므로 각 프로세스마다 (프로세스 단계 * 3)만큼 다양해지는 모든 경우를 고려하여 그중 동생의 위치까지 갔을 때 지금까지 소요된 시간 출력
  • 크기가 100001인 일차원 리스트에 각 위치마다 시간이 얼마나 걸렸는지 갱신하며 동생을 찾을 수 있는 가장 빠른 시간을 구하기

 

2.  메모리 초과 코드

#메모리 초과
from collections import deque

N,K = map(int, input().split())

def bfs(n,k):
    q = deque([N])
    result = 0
    count = 1
    while q:
        pos = q.popleft()
        if pos == K:
            print(result)
            break
        q.append(pos+1)
        q.append(pos-1)
        q.append(2*pos)
        if len(q) == 3**count:
            count+=1
            result+=1                   
bfs(N,K)

 

3. 성공 코드

from collections import deque

MAX = 100001
N,K = map(int, input().split())
mapp = [0]*MAX
def bfs():
    q = deque([N])
    while q:
        pos = q.popleft()
        if pos == K:
            return mapp[pos]
        for next_pos in (pos-1, pos+1, pos*2):
            if 0<=next_pos<MAX and not mapp[next_pos]:
                mapp[next_pos] = mapp[pos]+1
                q.append(next_pos)
                
print(bfs())
반응형