접근
백준 2579번 계단오르기와 매우 유사한 문제이다.
2021.03.28 - [SW/백준 (Python)] - 백준 2579번: 계단 오르기 (Python)
매우 비슷하여 비슷하게 풀이하면 되지만 조건이 조금 다르므로 체크할 필요가 있다.
- 계단 오르기와 달리 한 칸만을 건너뛰는 조건이 없어 두 칸을 건너뛰는 조건을 추가. 3칸을 건너뛸 경우 한 칸 건너뛰기 두 번 수행하는 것이 무조건 최대값이기 때문에 생각하지 않음.
- 첫잔, 혹은 마지막잔을 무조건 마셔야 하는 조건이 없음. 마지막에서 두번째 리스트까지 검사하여 최대값 확인. 마지막에서 세번째 값의 경우 한 칸을 건너뛰어 마지막 잔을 마시는 것이 무조건 최대값이기 때문에 생각하지 않음.
두 칸을 건너뛰는 조건을 위해 기존 계단오르기 코드에서 리스트 요소를 한개씩 더 추가해 주었다.
코드
import sys
n = int(sys.stdin.readline())
max_wine = [[0, 0, 0] for _ in range(n + 1)]
wine = [0 for __ in range(n + 1)]
for i in range(1, n + 1):
wine[i] = int(sys.stdin.readline())
max_wine[1] = [wine[1], wine[1], wine[1]]
if n > 1:
max_wine[2] = [wine[2], wine[2], wine[1] + wine[2]]
if n > 2:
for j in range(3, n + 1):
max_wine[j][0] = max(max_wine[j - 3]) + wine[j]
max_wine[j][1] = max(max_wine[j - 2]) + wine[j]
max_wine[j][2] = max(max_wine[j - 1][0], max_wine[j - 1][1]) + wine[j]
a = max_wine[-1] + max_wine[-2]
print(max(a))
더 생각해 볼 것?
...
반응형
'코딩 > 백준 (Python)' 카테고리의 다른 글
백준 11054번: 가장 긴 바이토닉 부분 수열 (Python) (0) | 2021.03.29 |
---|---|
백준 11053번: 가장 긴 증가하는 부분 수열 (Python) (0) | 2021.03.28 |
백준 10844번: 쉬운 계단 수 (Python) (0) | 2021.03.28 |
백준 1463번: 1로 만들기 (Python) (0) | 2021.03.28 |
백준 2579번: 계단 오르기 (Python) (0) | 2021.03.28 |
최근댓글