728x90
1. 링크
https://www.acmicpc.net/problem/1912
2. 난이도(solved.ac 참고)
실버2
3. 풀이
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
# https://www.acmicpc.net/problem/1912 | |
n = int(input()) | |
a = list(map(int, input().split())) | |
dp = [0] * n | |
dp[0] = a[0] | |
if max(a) < 0: | |
print(max(a)) | |
else: | |
for i in range(1, n): | |
if dp[i-1] + a[i] > 0: | |
dp[i] = dp[i-1] + a[i] | |
print(max(dp)) |
가장 큰 값이 음수라면 일단 더해봤자 값이 더 커질 수가 없으므로 그 값만 출력한다.
그게 아닐 경우에는 dp라는 배열을 따로 만들어서 첫 값으로는 input값을 받아서 만든 리스트의 첫번째 값을 반환하고 그 이후부터는 dp의 이전 인덱스 값과 input값을 받아서 만든 리스트 a의 현재 인덱스 값을 더한 게 양수인 경우에만 dp의 현재 인덱스에 값을 부여해주고 그게 아니라면 dp[i]는 0으로 그대로 남게 된다. 즉 더한 값이 0보다 작을 경우엔 0으로 초기화하여 다시 시작하는 과정을 반복한 것이다.
'CS > 알고리즘' 카테고리의 다른 글
[Python] BOJ(백준) 14502번 - 연구소 (0) | 2021.09.26 |
---|---|
[Python] BOJ(백준) 11659, 11660번 - 구간 합 구하기(4), (5) (0) | 2021.09.25 |
[Python] BOJ(백준) 3273번 - 두 수의 합 (0) | 2021.09.24 |
[Python] BOJ(백준) 2981번 - 검문 (0) | 2021.09.21 |
[Python] BOJ(백준) 17129번 - 윌리암슨수액빨이딱따구리가 정보섬에 올라온 이유 (0) | 2021.09.19 |