Skip to content

Commit fc863b7

Browse files
committed
solve: 2579 계단오르기
1 parent 365d638 commit fc863b7

File tree

2 files changed

+77
-0
lines changed

2 files changed

+77
-0
lines changed
Lines changed: 37 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,37 @@
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])
Lines changed: 40 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,40 @@
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+
```

0 commit comments

Comments
 (0)