문제 링크
https://www.acmicpc.net/problem/1697
1697번: 숨바꼭질
수빈이는 동생과 숨바꼭질을 하고 있다. 수빈이는 현재 점 N(0 ≤ N ≤ 100,000)에 있고, 동생은 점 K(0 ≤ K ≤ 100,000)에 있다. 수빈이는 걷거나 순간이동을 할 수 있다. 만약, 수빈이의 위치가 X일
www.acmicpc.net
코드
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
|
import sys
from collections import deque
input = sys.stdin.readline
n, k = map(int,input().split())
MAX = 200000
check = [-1]*(MAX+1)
dq = deque()
check[n]=0
dq.append(n)
while dq:
x = dq.popleft()
if x==k:
break
for nx in [x+1, x-1, 2*x]:
if 0<=nx<=MAX and check[nx]==-1:
check[nx]=check[x]+1
dq.append(nx)
ans = check[k]
print(ans)
|
cs |
핵심Point
- 가중치가 1인 최단길이를 구할 때 BFS를 사용한다. (가중치 존재 시, 다익스트라 알고리즘 사용)
- MAX값을 고려해야하는데, 가능한 연산이 x+1, x-1, 2*x이므로 최대를 20,000으로 잡을 수 있다. (x<=10,000)
- BFS의 시간복잡도는 O(V정점갯수+E간선수)
이때, 최대 정점수가 10,000이고 최대 간선수는 30,000 (B/C. 각 정점에서 3가지 행동가능) --> 총 40,000내에 해결가능
'Algorithm > Baekjoon' 카테고리의 다른 글
[백준]13549 숨바꼭질3 파이썬 python (0) | 2022.01.14 |
---|---|
[백준]14226번 이모티콘 파이썬 python (0) | 2022.01.14 |
다익스트라 알고리즘 (0) | 2022.01.13 |
[백준]13913 숨바꼭질4 파이썬 python (0) | 2022.01.13 |
[백준]7562번 나이트의 이동 파이썬 python (0) | 2022.01.13 |