문제
13549번: 숨바꼭질 3
수빈이는 동생과 숨바꼭질을 하고 있다. 수빈이는 현재 점 N(0 ≤ N ≤ 100,000)에 있고, 동생은 점 K(0 ≤ K ≤ 100,000)에 있다. 수빈이는 걷거나 순간이동을 할 수 있다. 만약, 수빈이의 위치가 X일
www.acmicpc.net
알고리즘
- 0 - 1 bfs 탐색을 통해 문제를 수행한다.
- 동생의 위치에 도달했다면 리턴하고 도달하지 못했다면 이동한다.
- 이동은 3가지 방법을 반복문을 통해 수행한다.
- 이동하는 곳이 범위 내에 있고 이동하지 않은 곳이라면 이동한다.
- 순간이동이라면 이전에 초로 갱신하고 appendleft()로 탐색한다.
- 순간이동이 아니라면 이전에 초에 +1 해주고 append()로 탐색한다.
- 위 탐색과정이 다른 것이 0 - 1 bfs 탐색이 된다.
코드
import sys
from collections import deque
# 0 - 1 bfs 탐색
def bfs():
graph = [-1] * 100001
graph[n] = 0
queue = deque([n])
while queue:
target = queue.popleft()
# 동생의 위치에 도달했다면 리턴
if target == k:
return graph[target]
# 반복문을 통해 3가지 이동의 경우를 확인
for i in (target + 1, target - 1, target * 2):
# 이동하는 곳이 범위 내에 있고 이동하지 않았다면 이동
if 0 <= i <= 100000 and graph[i] == -1:
# 순간이동이라면
if i == target * 2:
graph[i] = graph[target] # 0초 갱신
queue.appendleft(i) # 순간이동이기에 먼저 탐색
else:
graph[i] = graph[target] + 1
queue.append(i)
n, k = map(int, sys.stdin.readline().split())
print(bfs())
github
GitHub - junjange/CodingTest: 내가 푼 코딩 테스트 문제와 해결법
내가 푼 코딩 테스트 문제와 해결법. Contribute to junjange/CodingTest development by creating an account on GitHub.
github.com
'CodingTest > Baekjoon' 카테고리의 다른 글
[baekjoon] 백준 2096번(파이썬): 내려가기 (0) | 2022.06.08 |
---|---|
[baekjoon] 백준 5014번(파이썬): 스타트링크 (0) | 2022.06.07 |
[baekjoon] 백준 2565번(파이썬): 전깃줄 (0) | 2022.06.05 |
[baekjoon] 백준 11048번(파이썬): 이동하기 (0) | 2022.06.02 |
[baekjoon] 백준 1107번(파이썬): 리모컨 (0) | 2022.05.25 |