코딩하는 해맑은 거북이

[Python] 연속합 - 백준 (DP) 본문

코딩테스트

[Python] 연속합 - 백준 (DP)

#CJE 2023. 1. 21.
해당 글은 백준 1912번 문제 '연속합'을 다룬다.

문제

https://www.acmicpc.net/problem/1912

 

1912번: 연속합

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

www.acmicpc.net

 

설명

해당 문제는 완전 탐색으로 풀면 시간 초과가 뜬다. DP로 해결하면 빠른 시간안에 해결할 수 있다.

정수의 갯수 만큼 for문을 돌려 '이전의 모든 숫자 합들 중 최댓값'에 현재값을 더한 값과 현재값을 비교해서 큰 값으로 업데이트를 시켜준다.

즉, 점화식은 아래와 같이 표현된다.

arr[i] = max(arr[i], arr[i-1]+arr[i])

     

 

코드

n = int(input())
arr = list(map(int, input().split()))
for i in range(1, n):
    arr[i] = max(arr[i], arr[i-1]+arr[i])
print(max(arr))

     

 

 

'코딩테스트' 카테고리의 다른 글

[Python] 주유소 - 백준 (그리디)  (0) 2023.01.22
[Python] 늑대와 양 - 백준  (0) 2023.01.22
[Python] 회전하는 큐 - 백준  (0) 2023.01.21
[Python] 풍선 터뜨리기 - 백준  (0) 2023.01.21
[Python] 달팽이 - 백준  (0) 2023.01.21
Comments