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 |
Tags
- opic
- 오픽노잼
- stack 스택
- XML
- 오픽점수잘받는방법
- 이진탐색 #나무 자르기
- 안드로이드주석
- 탑다운
- XML주석
- 다이나믹프로그래밍
- 오픽노잼공부방법
- 오픽공부법
- English
- ㅂ
- 디피
- 메모이제이션
- dynamicProgramming
- 영어말하기
- 오픽가격
- 안드로이드
- 주석
- 바텀업
- fibo
- dp
- 이진탐색
- topdown
- 피보나치수열
- 영어회화
- 오픽
Archives
RUBY
[BOJ] 숨박꼭질3 13549 본문
출처:: https://www.acmicpc.net/problem/13549
1. 문제 이해 및 해결과정
- 우선순위 를 생각해야한다. - 이 문제는 가중치가 있는 BFS이다. - 0초로 이동하는 것은 X-1,X+1 (1초) 보다 우선순위를 가진다. - 순간이동을 하면(2X) , deque의 뒤에 추가한다. - X-1,X+1, deque의 앞에 추가한다. - 이 순서로 추가하면, popleft로 인해 앞에서 부터 pop하여 cur을 찾으므로 우선순위에 따라 이동할 수 있다. |
2. 풀이방법
1. BFS
#숨바꼭질3
#https://www.acmicpc.net/problem/13549
import sys
from collections import deque
sys.stdin = open("input.txt","r")
input=sys.stdin.readline
n,k=map(int,input().split())
MAX=100000
time=[-1]*(MAX+1) #순간이동은 0초이므로 -1로 초기화
Q=deque()
Q.append(n)
time[n]=0
while Q:
cur=Q.popleft()
if cur == k:
print(time[cur])
break
next = cur * 2
if 0 <= next <= MAX and time[next] == -1:
Q.appendleft(next)
time[next] = time[cur]
next = cur-1
if 0<=next<=MAX and time[next]==-1:
Q.append(next)
time[next] = time[cur] + 1
next = cur+1
if 0 <= next <= MAX and time[next] == -1:
Q.append(next)
time[next] = time[cur] + 1
2. BFS for문 한번에 변경
#숨바꼭질3
#https://www.acmicpc.net/problem/13549
import sys
from collections import deque
sys.stdin = open("input.txt","r")
input=sys.stdin.readline
n,k=map(int,input().split())
MAX=100000
time=[-1]*(MAX+1) #순간이동은 0초이므로 -1로 초기화
Q=deque()
Q.append(n)
time[n]=0
while Q:
cur=Q.popleft()
if cur == k:
print(time[cur])
break
for next in (cur - 1, cur + 1, cur * 2):
if 0 <= next <= MAX and time[next] == -1:
if next==cur*2: #순간이동이라면
Q.appendleft(next)
time[next] = time[cur]
else:
Q.append(next)
time[next] = time[cur] + 1
3. 오답원인
- 순간이동을 할 경우, 0초이므로 time을 -1로 초기화 하였는데 첫 시작점을 0부터 시작해야한다.
time[n]=0
4. 알게된 점
'PS > BOJ' 카테고리의 다른 글
[BOJ] 알고스팟 1261 ★ (0) | 2020.07.04 |
---|---|
[BOJ] 숨박꼭질 4 R (0) | 2020.07.03 |
[BOJ] 이분그래프 1707 ★ (0) | 2020.07.03 |
[BOJ] ABCDE 13023 (0) | 2020.07.03 |
[BOJ] 나이트의 이동 7562 (0) | 2020.07.03 |
Comments