Skip to content

Commit 467a01c

Browse files
committed
[BOJ]#28069. 김밥천국의 계단/골드5/실패
https://www.acmicpc.net/problem/28069
1 parent 3283575 commit 467a01c

File tree

1 file changed

+50
-0
lines changed

1 file changed

+50
-0
lines changed
Lines changed: 50 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,50 @@
1+
"""
2+
https://www.acmicpc.net/problem/28069
3+
4+
- 0 ~ N-1 번 계단 옆에 목표 김밥집
5+
- 2가지 중 택 1을 K번 반복하여 김밥집(=N) 에 도달하자
6+
7+
(1) nex_i = 계단 +1
8+
(2) nex_i = i + i//2
9+
-> goal)K번 행동으로 0 -> N 까지 도달 여부 확인하기
10+
(1<=n<=1000000)
11+
# 유형 : 그래프 탐색 - DFS/BFS
12+
- 목적지 "K" 까지 도달 여부 확인
13+
14+
# 출력
15+
김밥 도달 = minigimbob
16+
물 = water
17+
18+
# 풀이 renewal : BFS는 시간 초과난다고 하고, 횟수 count 를 어떻게 해야할지 모르겠다
19+
# 보편적 풀이인 DP 로 간다
20+
- 점화식
21+
22+
23+
"""
24+
import sys
25+
from collections import deque
26+
#1. 입력 변수
27+
N , K = map(int, sys.stdin.readline().split())
28+
# DP
29+
INF = 1e9
30+
dp = [INF] * (N+1)
31+
32+
dp[0] = 0
33+
dp[1] = 1 # 1 = 0+1 1가지 밖에 없음
34+
35+
"""
36+
dp[i] : 현재 i 도달하는데 최소 횟수
37+
dp[i+1] = min(dp[i+1] , dp[i]+1) # 유지 , 업데이트
38+
dp[i + i//2] = min(dp[i+i//2] , dp[i]+1)
39+
"""
40+
41+
for i in range(1,N+1):
42+
if i+1 <= N :
43+
dp[i+1] = min(dp[i+1] , dp[i]+1)
44+
if i+i//2 <= N : #순간이동 가능한 경우
45+
dp[i + i//2] = min(dp[i+i//2] , dp[i]+1)
46+
47+
if dp[N] <= K :
48+
print("minigimbob")
49+
else :
50+
print("water")

0 commit comments

Comments
 (0)