본문 바로가기

알고리즘/백준

[백준] 12851번 : 숨바꼭질 2

728x90

12851번: 숨바꼭질 2

 

12851번: 숨바꼭질 2

수빈이는 동생과 숨바꼭질을 하고 있다. 수빈이는 현재 점 N(0 ≤ N ≤ 100,000)에 있고, 동생은 점 K(0 ≤ K ≤ 100,000)에 있다. 수빈이는 걷거나 순간이동을 할 수 있다. 만약, 수빈이의 위치가 X일 때

www.acmicpc.net

🤔 문제분석

너비우선탐색으로 문제를 해결하였는데 처음 방문한경우와 이전위치에서 오는 경우 두가지를 따져서 모든 경우의 수를 구해야합니다.

💻 코드

import sys
from collections import deque
input = sys.stdin.readline

N, K = map(int, input().split())
vistied = [-1] * 100001

queue = deque()
queue.append((N))
vistied[N] = 0
ans = 0

while queue:
    cur = queue.popleft()
    
    if cur == K:
        ans += 1
        continue
    
    for next in (cur*2, cur + 1, cur - 1):
        if 100001 > next >=0 and (vistied[next] == vistied[cur] + 1 or vistied[next] == -1):
            vistied[next] = vistied[cur] + 1
            queue.append((next))    
            
print(vistied[K])
print(ans)

🎯 피드백 및 개선사항

처음에 좌표가 100000을 넘어 갈 수 있는줄 알고 visited 배열을 어느 범위까지 생성해야하나 고민에 시간을 너무 많이 빼앗겨 버린 문제였네요…

이전위치에서 오는 경우도 고려해야함을 알게되었습니다. 이만 안녕 🖖

728x90