Study/BOJ
BOJ 1912번
루ㅌ
2020. 2. 21. 18:00
https://www.acmicpc.net/problem/1912
1912번: 연속합
첫째 줄에 정수 n(1 ≤ n ≤ 100,000)이 주어지고 둘째 줄에는 n개의 정수로 이루어진 수열이 주어진다. 수는 -1,000보다 크거나 같고, 1,000보다 작거나 같은 정수이다.
www.acmicpc.net
DP 문제입니다.
주어진 배열의 연속된 가장 큰 값을 구하는 함수를 만들었는데
dp0에는 가장 큰 값을 계속 저장하고
dp1에는 for문을 돌며 나오는 값 중에서 연속된 가장 큰 값을 계속해서 저장합니다.
그래서 dp1과 dp0중 더 큰 값을 dp0에 저장하기 때문에 dp0만 반환하면 간단하게 풀 수 있습니다.
n = int(input())
n_list = list(map(int, input().strip().split(' ')))
def getmax(n_list):
if len(n_list) == 1:
return n_list[0]
dp0 = n_list[0]
dp1 = dp0
for i, v in enumerate(n_list):
if i != 0:
dp0 = max(dp0, dp1 + n_list[i], n_list[i])
dp1 = max(dp1 + n_list[i], n_list[i])
else:
continue
return dp0
print(getmax(n_list))