TIL - 프로그래밍/Python 알고리즘
[백준] 12851. 숨바꼭질 2 - Python
chaemj97
2022. 10. 14. 01:44
728x90
https://www.acmicpc.net/problem/12851
12851번: 숨바꼭질 2
수빈이는 동생과 숨바꼭질을 하고 있다. 수빈이는 현재 점 N(0 ≤ N ≤ 100,000)에 있고, 동생은 점 K(0 ≤ K ≤ 100,000)에 있다. 수빈이는 걷거나 순간이동을 할 수 있다. 만약, 수빈이의 위치가 X일 때
www.acmicpc.net
- 생각
- 가장 빠른 시간으로 찾는 방법은 간단했는데 그 방법이 몇 가지인지 생각하는게 어려웠다
- 여러 방법 수를 구하기 위해 deque쓰기
- K에 도착하기전 K-1에 도착하는 방법의 수를 셀까 하다가 같은 시간(그 위치 최단 도착 시간)에 방문하는 거 한 번 더 deque에 넣어주기
- 가장 빠른 시간으로 찾는 방법은 간단했는데 그 방법이 몇 가지인지 생각하는게 어려웠다
- 코드
from sys import stdin
input = stdin.readline
from collections import deque
# 수빈 위치, 동생 위치
N, K = map(int,input().split())
MAX_SIZE = 100001
que = deque()
que.append(N)
visited = [-1]*MAX_SIZE
visited[N] = 0
cnt = 0
while que:
# 현 위치
current = que.popleft()
# 도착
if current == K:
cnt += 1
# 이동
for next in [current*2,current+1,current-1]:
# 범위 내
if 0 <= next < MAX_SIZE:
# 첫방문 혹은 방문 시간이 같은 경우가 이미 있음(가장 빠른 시간 방법의 수를 위해)
if visited[next] == -1 or visited[next] >= visited[current] + 1:
visited[next] = visited[current] + 1
que.append(next)
print(visited[K])
print(cnt)
728x90
반응형