문제
https://www.acmicpc.net/problem/1697
1697호: 숨바꼭질
수빈은 남동생과 숨바꼭질을 하고 있다. 수빈은 현재 포인트 N(0 ≤ N ≤ 100,000)에 있고, 동생은 포인트 K(0 ≤ K ≤ 100,000)에 있다. 수빈은 걷거나 텔레포트할 수 있다. 수빈의 위치가 X일이라면
www.acmicpc.net
파이썬
import sys
from collections import deque
n, k = map(int, sys.stdin.readline().split())
#문제에서 주어진 n, k 값의 범위를 활용해 방문여부를 저장하는 리스트를 생성
sumba = (0 for _ in range(100001))
def bfs(x):
queue = deque((x))
while queue:
x = queue.popleft()
#x와 k가 동일하면 현재 sumba의 값을 리턴
if x == k:
return sumba(x)
for nx in (x-1, x+1, 2*x):
if nx < 0 or nx >= 100001: #인덱스 범위를 넘어서면 건너뛰기
continue
if sumba(nx) == 0: #아직 방문하지 않은 좌표라면
sumba(nx) = sumba(x) + 1 #방문처리+경로이동횟수 저장
queue.append(nx) #다음 방문할 좌표 설정 위해 큐에 nx 삽입
print(bfs(n)) #n에서부터 bfs 시작
더보기
만약 nx < 0 or nx >= 100001: 계속
이 부분 인덱스 처리에는 많은 시간이 걸렸습니다. 인덱스 취급 주의!