-
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))
'Study > BOJ' 카테고리의 다른 글
BOJ 11053번 (0) 2020.03.09 BOJ 11727번 (0) 2020.02.24 BOJ 2156번 (0) 2020.02.20 BOJ 1932번 (0) 2020.02.02 BOJ 2193번 파이썬 (0) 2020.01.30