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
- programmers
- greedy
- 정수론
- server
- DP
- JavaScript
- Algospot
- Python
- 인프런
- 따라하며 배우는 C언어
- 따배씨
- php
- udemy
- C언어
- 따라하면서 배우는 C언어
- web
- Algorithm
- BFS
- String
- BOJ
- 생활코딩
- C
- Math
- graph
- 종만북
- dfs
- Cleancode
- sorting
- BASIC
- 백준
Archives
- Today
- Total
몽상실현개발주의
[BOJ] 1697 / 숨바꼭질 / python 파이썬 본문
[BOJ] 1697 / 숨바꼭질 / python 파이썬
https://www.acmicpc.net/problem/1697
풀이
최단시간으로 도달하는 문제이기 때문에 BFS 로 풀이 하였다.
처음 시도에는 단순히 모든 경우의수를 탐색하였기 때문에, 메모리 초과가 발생 하였다.
방문했던 위치에 재방문 하는 경우의수를 고려하여 해결하였다.
from collections import deque
N, K = map(int, input().split())
# 1초 후에 X-1 또는 X+1로 이동하게 된다.
# 순간이동을 하는 경우에는 1초 후에 2*X의 위치로 이동하게 된다.
queue = deque()
queue.append(N)
MAX = 100000
time = [0] * 100001
time[N] = 0
while True:
Q = queue.popleft()
if Q == K:
print(time[Q])
break
if Q+1 <= MAX and not time[Q+1]:
time[Q+1] = time[Q]+1
queue.append(Q+1)
if Q-1 >= 0 and not time[Q-1]:
time[Q-1] = time[Q]+1
queue.append(Q-1)
if Q*2 <= MAX and not time[Q*2]:
time[Q*2] = time[Q]+1
queue.append(Q*2)
참고 블로그
'Algorithm PS > BOJ' 카테고리의 다른 글
[BOJ] 1525 / 퍼즐 / Python 파이썬 (0) | 2021.07.28 |
---|---|
[BOJ] 9019 / DSLR / Python 파이썬 (0) | 2021.07.27 |
[BOJ] 1963 / 소수 경로 / Python 파이썬 (0) | 2021.07.25 |
[BOJ] 10971 / 외판원 순회2 / Python 파이썬 (0) | 2021.07.25 |
[BOJ] 10819 / 차이를 최대로 / Python 파이썬 (0) | 2021.07.19 |
Comments