Notice
Recent Posts
Recent Comments
Link
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | ||
6 | 7 | 8 | 9 | 10 | 11 | 12 |
13 | 14 | 15 | 16 | 17 | 18 | 19 |
20 | 21 | 22 | 23 | 24 | 25 | 26 |
27 | 28 | 29 | 30 | 31 |
Tags
- Java #코딩테스트
- node
- Java #오븐시계 #백준
- python
- 카카오클라우드스쿨
- 파이썬
- 7568
- sequelize
- kakaocloud
- Java #백준 #코딩테스트
- 1110
- 24479
- 2447
- 알고리즘
- SpringTokenizer
- 11053
- Spring #Java #Spring Boot
- 15552
- Spring
- Spring #Java #Spring Boot #@BeforeEach #@AfterEach
- 11054
- boj
- 카카오 클라우드 스쿨
- kakaocloudschool
- 코딩테스트
- java
- Spring #Java #Spring Boot #싱글톤
- Spring #Spring Boot #Java
- 9020
- 백준
Archives
- Today
- Total
YoungSoo
백준 - 숨바꼭질 3(13549 Python 풀이) 본문
import sys
from collections import deque
input = sys.stdin.readline
n, k = map(int, input().split())
visited = [0 for i in range(10**5 + 1)]
visited[n] = 1
q = deque([n])
while q:
x = q.popleft()
if x == k:
print(visited[x]-1)
break
for i in (x-1, x+1, x*2):
if 0 <= i <= 10**5 and not visited[i]:
if i == x*2:
visited[i] = visited[x]
q.appendleft(i)
else:
visited[i] = visited[x] + 1
q.append(i)
최단 거리를 찾는 문제는 BFS 혹은 다익스트라 알고리즘을 통해 풀 수 있는데 둘 중 어떤 알고리즘을 통해 풀어야 하는지 결정하는 요소는 가중치의 여부인 거 같다. 이 문제는 가중치가 0또는 1인 문제이지만 BFS로 푸는게 더 효율적이었고 만약 0 또는 1이 아니라 더 많은 가중치가 있다면 다익스트라 알고리즘을 사용해주어야 한다.
BFS가 시간복잡도 적인 측면에서 BFS가 O(v+E)이고 다익스트라는 O(vlog(E))이기 때문에 BFS로 푸는게 효율적이라서 풀었다.
먼저 방문했는지 안 했는지 여부를 판별해주기 위해 길이가 10**5인 배열을 만들어주었고 반복문을 통해 x-1, x+1, x*2를 모두 할 수 있게 해 최단 경로를 구하는 알고리즘을 찾았고 x*2는 순간이동으로 생각해 0초가 걸리기 때문에 +1을 해주지 않았다.
'코딩테스트' 카테고리의 다른 글
프로그래머스 - 피로도(Python 풀이) (0) | 2023.03.12 |
---|---|
프로그래머스 - 가장 긴 펠린드롬(Python 풀이) (0) | 2023.03.09 |
백준 - 알고리즘 수업 - 깊이 우선 탐색 1(24479번 Python 풀이) (1) | 2023.02.13 |
백준 - 가장 긴 증가하는 부분 수열2(12015 Python 풀이) (0) | 2023.02.09 |
백준 - 행렬 제곱(10830 Python 풀이) (0) | 2023.02.03 |