문제
계단은 한번에 한 계단 or 두 계단씩 오를 수 있다.
연속 세개를 밟으면 안된다.
마지막 도착 계단은 반드시 밟아야한다.
이때 얻을 수 있는 점수의 최댓값을 구해라
문제 풀이
- 계단이 1개일때는 1개만 밟을 수 있다
- 계단이 두개일때는 두개 다 밟을 수 있다.
- 계단 세개일때는 마지막 계단은 꼭 밟아야하니, 첫번째 계단과 두번째 계단 중에서 점수가 높은 것을 밟을 수 있다.
- 계단이 네개 이상일때는 그 전 계단을 밟은 게 점수가 큰지, 전 계단을 안밟은게 점수가 큰지 확인한다.
코드
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
|
import sys
step_total = int(input())
steps = []
for _ in range(step_total):
steps.append(int(sys.stdin.readline().rstrip()))
# dp
dp = [0]*step_total
dp[0] = steps[0]
# 계단이 2개 이상일때
if step_total >= 2:
dp[1] = steps[0] + steps[1]
# 계단이 3개 이상일때
if step_total >= 3:
dp[2] = max(steps[0], steps[1]) + steps[2]
# 계단이 4개 이상일때
for idx in range(3, step_total):
dp[idx] = max(dp[idx-2], steps[idx-1]+dp[idx-3]) + steps[idx]
print(dp[step_total-1])
|
cs |
728x90
'알고리즘 > 백준 문제풀이' 카테고리의 다른 글
[백준] 2798 블랙잭 파이썬 풀이 (브루트포스) (0) | 2021.06.24 |
---|---|
[백준] 1002 터렛 파이썬 풀이 (기본 수학) (0) | 2021.06.24 |
[백준] 9663 N-Queen 파이썬 풀이 (백트래킹) (1) | 2021.06.24 |
[백준] 15650 N과 M(2) 파이썬 풀이 (백트래킹) (0) | 2021.06.24 |
[백준] 2630 색종이 만들기 파이썬 (분할정복) (0) | 2021.06.23 |