문제 링크: https://www.acmicpc.net/problem/1912
풀이
Dynamic Programming 문제답게 코드 구현보다는 문제 해결을 위한 아이디어를 생각하는 것이 더 어려운 문제이다.
문제 해결을 위한 아이디어는 다음과 같다.
- 우선 해당 인덱스까지의 최대값을 담을 배열을 선언한다.
- 그 후 처음부터 순회하며 해당 인덱스까지의 최대값을 계산하고 이를 저장한다.
- 해당 인덱스까지의 최대값은 이전 인덱스에서의 최대값 또는 현재 인덱스의 값이 된다.
- 최종적으로 최대값들을 담은 배열에서의 최대값이 정답이 된다.
import sys
n = int(sys.stdin.readline())
arr = list(map(int, sys.stdin.readline().split(" ")))
_max = [0] * n
_max[0] = arr[0] # 첫번째 인덱스에서의 최대값은 당연히 첫번째 인덱스가 나타내는 값
for i in range(1, n): # 입력값들을 순회하며
_max[i] = max(arr[i], _max[i-1] + arr[i]) # 현재 인덱스까지의 최대값(현재값 또는 이전까지의 최댓값 + 현재값)을 저장한다.
print(max(_max)) # 모든 인덱스에서의 최댓값 중 최댓값을 출력한다.
'알고리즘 > 알고리즘 문제 풀이' 카테고리의 다른 글
[프로그래머스 Lv.3] 정수 삼각형 (Python) (0) | 2024.03.27 |
---|---|
[프로그래머스 Lv.3] 최적의 행렬 곱셈 (Python) (0) | 2024.03.26 |
[프로그래머스 Lv.3] 입국심사 (Python) (0) | 2024.03.21 |
[프로그래머스 Lv.2] H-Index (Python) (0) | 2024.03.20 |
(Python) 백준 6588번 - 골드바흐의 추측 (0) | 2024.03.19 |