File tree 2 files changed +77
-0
lines changed
baekjoon/problems/[2579]계단 오르기 2 files changed +77
-0
lines changed Original file line number Diff line number Diff line change
1
+
2
+ """
3
+ 문제 이름: 계단 오르기
4
+ 문제 번호: 2579
5
+ 문제 링크: https://www.acmicpc.net/problem/2579
6
+ 난이도: Silver III
7
+ 태그: 다이나믹 프로그래밍
8
+ """
9
+ import sys
10
+
11
+
12
+ def input (): return sys .stdin .readline ().rstrip ()
13
+
14
+ def solve (stairs : list , count :int ) -> int :
15
+ if count <= 2 :
16
+ return sum (stairs )
17
+
18
+ DP = [0 ] * count
19
+ DP [0 ] = stairs [0 ]
20
+ DP [1 ] = stairs [0 ] + stairs [1 ]
21
+ DP [2 ] = max (stairs [0 ] + stairs [2 ], stairs [1 ] + stairs [2 ])
22
+ for i in range (3 , n ):
23
+ DP [i ] = max (DP [i - 3 ]+ stairs [i - 1 ]+ stairs [i ], DP [i - 2 ] + stairs [i ])
24
+
25
+ return DP [- 1 ]
26
+
27
+
28
+ n = int (input ())
29
+
30
+ stairs = [int (input ()) for _ in range (n )]
31
+
32
+
33
+ print (solve (stairs , n ))
34
+
35
+
36
+ # for i in range(stairs):
37
+ # dp[i] = max(dp[i+1,i-2])
Original file line number Diff line number Diff line change
1
+ ---
2
+ file : " 2579.md"
3
+ name : " 계단 오르기"
4
+ src : " https://www.acmicpc.net/problem/2579"
5
+ tags :
6
+ - 다이나믹 프로그래밍
7
+ done : false
8
+ draft : false
9
+ level : 8
10
+ difficulty : " Silver III"
11
+ date : 2021-11-06
12
+ ---
13
+
14
+ # 계단 오르기
15
+
16
+ ``` python
17
+ # 1. 계단은 한 번에 한 계단씩 또는 두 계단씩 오를 수 있다. 즉, 한 계단을 밟으면서 이어서 다음 계단이나, 다음 다음 계단으로 오를 수 있다.
18
+ # 2. 연속된 세 개의 계단을 모두 밟아서는 안 된다. 단, 시작점은 계단에 포함되지 않는다.
19
+ # 3. 마지막 도착 계단은 반드시 밟아야 한다.
20
+ # 계단은 300 이하 자연수
21
+ import sys
22
+
23
+ def input (): return sys.stdin.readline().rstrip()
24
+
25
+ n = int (input ())
26
+
27
+ stairs = [int (input ()) for _ in range (n)]
28
+ DP = [0 ] * n
29
+ # DP[n] - > n 계단까지 올라갔을떄 가장 높은 점수 값.
30
+ DP [0 ] = stairs[0 ]
31
+ DP [1 ] = stairs[0 ] + stairs[1 ]
32
+ DP [2 ] = max (stairs[0 ] + stairs[2 ], stairs[1 ] + stairs[2 ])
33
+
34
+ for i in range (3 , n):
35
+ DP [i] = max (DP [i- 3 ]+ stairs[i- 1 ]+ stairs[i], DP [i- 2 ] + stairs[i])
36
+
37
+ print (DP [- 1 ])
38
+ # for i in range(stairs):
39
+ # dp[i] = max(dp[i+1,i-2])
40
+ ```
You can’t perform that action at this time.
0 commit comments