1. 문제
https://www.acmicpc.net/problem/13549
13549번: 숨바꼭질 3
수빈이는 동생과 숨바꼭질을 하고 있다. 수빈이는 현재 점 N(0 ≤ N ≤ 100,000)에 있고, 동생은 점 K(0 ≤ K ≤ 100,000)에 있다. 수빈이는 걷거나 순간이동을 할 수 있다. 만약, 수빈이의 위치가 X일 때
www.acmicpc.net
2. 풀이
import sys
input = sys.stdin.readline
from collections import deque
# n, k : 수빈이와 동생의 위치
n, k = map(int, input().split())
positionList = [-1] * 100001
q = deque()
q.append(n)
positionList[n] = 0
while q:
n_posi = q.popleft()
if n_posi == k:
print(positionList[n_posi])
break
for af_position in (n_posi-1, n_posi+1, n_posi*2):
if 0 <= af_position < 100001 and positionList[af_position] == -1:
if af_position == n_posi*2 and af_position != 0:
q.appendleft(af_position)
positionList[af_position] = positionList[n_posi]
else:
q.append(af_position)
positionList[af_position] = positionList[n_posi] + 1
3. Feedback
- 해결까지 참 오래걸린 문제이다.
처음에는 브루트포스 알고리즘 개념을 적용하여 진행하려고 했지만, Recursion Error를 여러번 경험하면서 다른 알고리즘으로 접근이 필요하다고 생각했고, 이후 BFS 알고리즘을 적용하여 해결할 수 있었다.
문제에서 제시한 *2의 이동시간이 0이라는 점을 주의하여 q 배열에 appendleft하여 해결할 수 있었다.
'알고리즘 공부 > 백준' 카테고리의 다른 글
(Python)백준 코딩테스트 연습 - 평범한 배낭(12865) (0) | 2023.07.16 |
---|---|
(Python)백준 코딩테스트 연습 - 토마토(7576) (0) | 2023.07.15 |
(Python)백준 코딩테스트 연습 - AC(5430) (0) | 2023.07.04 |
(Python)백준 코딩테스트 연습 - 컴백홈(1189) (0) | 2023.06.30 |
(Python)백준 코딩테스트 연습 - RGB거리(1149) (0) | 2023.06.28 |