[백준 온라인 저지] 숨바꼭질

문제 링크

https://www.acmicpc.net/problem/1697

나의 풀이

from collections import deque

def bfs(queue, visited, k):
  while queue:
    position, time = queue.popleft()

    # 정해진 범위를 벗어났을 때
    if position < 0 or position > len(visited)-1 or visited[position]:
      continue
    
    visited[position] = True

    # 동생과 만났을 때
    if position == k:
      return time
    else:
      queue.append((position-1, time+1))
      queue.append((position+1, time+1))
      queue.append((position*2, time+1))

n, k = list(map(int, input().split()))

visited = [False for _ in range(200000)]

queue = deque()
queue.append((n, 0))

print(bfs(queue, visited, k))

풀이 회고

처음에 visited 리스트의 길이를 n, k 중에 더 큰 것의 길이로 해서 문제가 있었다. 넘어간 다음에 뒤로 오면서 찾을 때가 빠를 때도 있었기 때문이었다. 그래서 최대 가능한 범위의 두배로 길이를 잡고 했다. 정말 오랜만에 파이썬으로 푸니까 적응이 좀 안된다.

좋은 웹페이지 즐겨찾기