From eded08a5d1deae6145bda5a08eb80ded4a34eca6 Mon Sep 17 00:00:00 2001 From: sm4640 Date: Mon, 30 Mar 2026 12:35:45 +0900 Subject: [PATCH] =?UTF-8?q?2156-s1=20=EC=84=B1=EA=B3=B5?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- workbook_7319/silver/2156-s1.py | 45 +++++++++++++++++++++++++++++++++ 1 file changed, 45 insertions(+) create mode 100644 workbook_7319/silver/2156-s1.py diff --git a/workbook_7319/silver/2156-s1.py b/workbook_7319/silver/2156-s1.py new file mode 100644 index 0000000..fb1a42e --- /dev/null +++ b/workbook_7319/silver/2156-s1.py @@ -0,0 +1,45 @@ +# 포도주 시식 + +import sys + +input = sys.stdin.readline + +def solution(): + n = int(input().rstrip()) + + lst = [0] * n + for i in range(n): + lst[i] = int(input().rstrip()) + + dp = [0] * n + dp[0] = lst[0] + + if n >= 2: + dp[1] = lst[0] + lst[1] + + if n >= 3: + dp[2] = max(lst[0]+lst[1], lst[1]+lst[2], lst[0]+lst[2]) + + + for i in range(3, n): + dp[i] = max(dp[i-1], dp[i-2]+lst[i], dp[i-3]+lst[i-1]+lst[i]) + + + print(dp[n-1]) + return + + +solution() + +""" +걸린 시간: 10분 + +시간 복잡도: n개의 dp 테이블을 채워야하기 때문에 O(n)이다. + +해설: 2579(계단 오르기) 문제와 비슷하다. +다른 점은 1,2칸씩 가는 것이 강제되어 있지 않고, 자유롭게 칸을 왔다갓다 할 수 있다는 것이다. +하지만 최대로 마셔야하기 때문에 왔다갔다 할 필요는 없고, 3개가 연속되지 않게 최대한 촘촘하게 먹어야 한다. +dp[i]는 i번째 값을 선택할 경우와 선택하지 않을 경우에 따라 max 값을 선택하면 되고, 선택하지 않을 경우 dp[i-1]에서 가져오고, +선택할 경우, 바로 앞의 잔을 마셨다면 2번째 잔을 마시지 말았어야하고(dp[i-3]+lst[i-1]+lst[i]), +바로 앞의 잔을 안 마셨다면 2번째 전에서 값(dp[i-2]+lst[i])을 가져오면 된다. +""" \ No newline at end of file