728x90
1. 문제
https://www.acmicpc.net/problem/1912
1912번: 연속합
첫째 줄에 정수 n(1 ≤ n ≤ 100,000)이 주어지고 둘째 줄에는 n개의 정수로 이루어진 수열이 주어진다. 수는 -1,000보다 크거나 같고, 1,000보다 작거나 같은 정수이다.
www.acmicpc.net
2. 접근
연속합은 동적계획법이나 분할정복 등의 여러 알고리즘으로 구할 수 있는데, 그 중 시간복잡도가 가장 낮은 동적계획법으로 구현했다.
* 동적계획법이 아닌 다른 알고리즘은 아래에 참고하면 된다.
[알고리즘] 연속 부분 수열의 합
연속 부분 수열의 합? : 비어 있지 않는 숫자 배열에서 합이 최대가 되는 연속된 부분수열 구간의 합 아래와 같은 정수 배열이 있을 때, -2 -3 4 -1 -2 1 5 -3 4부터 5까지의 연속된 구간의 합은 7로 다
2nnsv.tistory.com
3. 코드
n = input()
arr=list(map(int, input().split()))
def DynamicProgramming(arr):
cache = [None] * len(arr)
cache[0] = arr[0]
for i in range(1, len(arr)):
cache[i] = max(0, cache[i-1]) + arr[i]
return max(cache)
print(DynamicProgramming(arr))
728x90
'PS > BOJ' 카테고리의 다른 글
[Python] 백준 10828 : 스택 (0) | 2022.07.14 |
---|---|
[Python] 백준 10809 : 알파벳 찾기 (0) | 2022.07.14 |
[Python] 백준 14425 : 문자열 집합 (0) | 2022.06.07 |
[Python] 백준 17219 : 비밀번호 찾기 (0) | 2022.06.07 |
[C] 백준 11729 : 하노이 탑 이동 순서 (0) | 2022.05.29 |