본문으로 바로가기

[백준/Python(파이썬)] 13398 연속합2

category PS/백준 2021. 2. 16. 22:40

문제 : www.acmicpc.net/problem/13398

 

13398번: 연속합 2

첫째 줄에 정수 n(1 ≤ n ≤ 100,000)이 주어지고 둘째 줄에는 n개의 정수로 이루어진 수열이 주어진다. 수는 -1,000보다 크거나 같고, 1,000보다 작거나 같은 정수이다.

www.acmicpc.net

연속합과 다른 조건은 수열에서 수를 하나 제거할 수 있다는 점임

그래서 dp를 차원을 두 개 두고 구현하던데 나는 그냥 리스트 두개로 구현함

[소스코드]

n = int(input())
a = list(map(int, input().split()))
dp1 = [0 for _ in range(n)]
dp2 = [0 for _ in range(n)]
dp1[0] = a[0]
dp2[0] = -999999999
result = -999999999
for i in range(1, n):
    dp1[i] = max(a[i], a[i]+dp1[i-1])
    dp2[i] = max(dp1[i-1], dp2[i-1]+a[i])

for i in range(n):
    result = max(result, dp1[i], dp2[i])
print(result)

github.com/jisun1125/algorithm-problem-solving/blob/main/baekjoon/no_13398.py