본문 바로가기

Algorithm & Data Structure

백준 - 2156번

728x90
반응형
import sys

n = int(sys.stdin.readline())
wine = [0] * n

for i in range(n):
    wine[i] = int(sys.stdin.readline())


arr = [0] * (n-1)



for i in range(n-1):
    arr[i] = (int(wine[i]) + int(wine[i+1]))

temp = [0] * 10001

t = 0
for i in range(len(arr)):
    for k in range(len(arr)):
        t = t+1
        try:
            temp[t] = (arr[i] + arr[i + k + 3])
        except IndexError:
            pass

k = max(temp)

print(k)

시간 초과라고 뜨지만 답도 틀린 것 같다.

 

 

import sys

n = int(sys.stdin.readline())
wine = [0]

for i in range(n):
    wine.append(int(sys.stdin.readline()))


dp = [0]
dp.append(wine[1])

if n>1:
    dp.append(wine[1] + wine[2])

for i in range(3,n+1):
    dp.append(max(int(dp[i-2]) + int(wine[i]), int(dp[i-3]) + int(wine[i-1]) + int(wine[i]),
                  int(dp[i-1])))

print(max(dp))

다이나믹 프로그래밍을 하는 생각 구조는 이렇게 하면 될 것 같다.

1. 문제의 규칙을 '최대한 간단한 조건' 일때 찾는다.

2. dp[0] = 0으로 비워두자

3. 1번과 2번의 케이스는 하드코딩을 통해서 직접 만들어 놓는다.

4. 보통 3번째 부터 시작하는 것이 좋다.

5. 이전값을 dp에 저장하고 호출하는 방식으로 규칙을 짜야한다.

728x90
반응형

'Algorithm & Data Structure' 카테고리의 다른 글

백준 - 1931번  (0) 2022.01.24
백준 - 11047(그리디 알고리즘)  (0) 2022.01.24
백준 - 11053번  (0) 2022.01.17
백준 - 1904번  (0) 2022.01.17
Dynamic Programming  (0) 2022.01.16