File tree Expand file tree Collapse file tree 1 file changed +50
-0
lines changed
Expand file tree Collapse file tree 1 file changed +50
-0
lines changed Original file line number Diff line number Diff line change 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" )
You can’t perform that action at this time.
0 commit comments