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))