2156-s1 성공
This commit is contained in:
45
workbook_7319/silver/2156-s1.py
Normal file
45
workbook_7319/silver/2156-s1.py
Normal file
@@ -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])을 가져오면 된다.
|
||||
"""
|
||||
Reference in New Issue
Block a user