728x90
https://www.acmicpc.net/problem/1912
1912번: 연속합
첫째 줄에 정수 n(1 ≤ n ≤ 100,000)이 주어지고 둘째 줄에는 n개의 정수로 이루어진 수열이 주어진다. 수는 -1,000보다 크거나 같고, 1,000보다 작거나 같은 정수이다.
www.acmicpc.net
구간의 최대 연속합을 구하는 문제
저장소를 만들어 현재까지의 최대 연속합을 저장해 나가면서 풀면 된다.
여기서 최대 연속합이 되는 경우는 3가지 경우인데
첫번째 경우는 -1 3 처럼 3이 현재값이 최대인경우
두번째는 3 2 처럼 전의 최장합과 바로 앞 원소가 더해져야 최대인 경우
세번째는 -1 2 3 처럼 자기 자신과 그 전 원소가 최대인 경우
이 모든 경우를 저장하며 끝까지 이어나간다음 dp의 최대값을 도출하면 된다.
n = int(input())
arr = list(map(int, input().split()))
dp = [0] * (n)
dp[0] = arr[0]
for i in range(1, n):
dp[i] = max(dp[i-1] + arr[i], arr[i-1]+arr[i], arr[i] )
#이전 최장합과 연결, 자신 바로 앞 원소과 연결, 자기 자기자신 이 3가지 경우만 존재
print(max(dp))
완성
728x90
'알고리즘' 카테고리의 다른 글
[백준] 11055번: 가장 큰 증가하는 부분 수열 - python (0) | 2024.04.01 |
---|---|
[백준] 11053번: 가장 긴 증가하는 부분 수열 - python (0) | 2024.03.30 |
[백준] 2193번: 이친수 - python (1) | 2024.03.29 |
[백준] 11000번: 강의실 배정 - python (0) | 2024.03.28 |
[백준] 11050번: 이항 계수 1 - python (0) | 2024.03.28 |