접근

백준 2579번 계단오르기와 매우 유사한 문제이다.

2021.03.28 - [SW/백준 (Python)] - 백준 2579번: 계단 오르기 (Python)

 

백준 2579번: 계단 오르기 (Python)

접근 단계별 문제에서 동적 계획법 이전 문제들과 비슷한 문제이다. 2021.03.27 - [SW/백준 (Python)] - 백준 1149번: RGB 거리 (Python) 백준 1149번: RGB 거리 (Python) 접근 [0, 0, 0] 리스트 N + 1개를 요소..

ca.ramel.be

매우 비슷하여 비슷하게 풀이하면 되지만 조건이 조금 다르므로 체크할 필요가 있다.

  1. 계단 오르기와 달리 한 칸만을 건너뛰는 조건이 없어 두 칸을 건너뛰는 조건을 추가. 3칸을 건너뛸 경우 한 칸 건너뛰기 두 번 수행하는 것이 무조건 최대값이기 때문에 생각하지 않음.
  2. 첫잔, 혹은 마지막잔을 무조건 마셔야 하는 조건이 없음. 마지막에서 두번째 리스트까지 검사하여 최대값 확인. 마지막에서 세번째 값의 경우 한 칸을 건너뛰어 마지막 잔을 마시는 것이 무조건 최대값이기 때문에 생각하지 않음.

두 칸을 건너뛰는 조건을 위해 기존 계단오르기 코드에서 리스트 요소를 한개씩 더 추가해 주었다.

코드

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))

더 생각해 볼 것?

...

반응형
  • 네이버 블러그 공유하기
  • 네이버 밴드에 공유하기
  • 페이스북 공유하기
  • 카카오스토리 공유하기