1. 문제
https://www.acmicpc.net/problem/1912
1912번: 연속합
첫째 줄에 정수 n(1 ≤ n ≤ 100,000)이 주어지고 둘째 줄에는 n개의 정수로 이루어진 수열이 주어진다. 수는 -1,000보다 크거나 같고, 1,000보다 작거나 같은 정수이다.
www.acmicpc.net
2. 풀이
import sys
input = sys.stdin.readline
# n : 주어지는 정수 수
n = int(input())
# nList : 정수 리스트
nList = list(map(int, input().split()))
dp = [0 for i in range(n)]
dp[0] = nList[0]
for i in range(1, n):
dp[i] = max(dp[i-1] + nList[i], nList[i])
print(max(dp))
3. FeedBack
- 이번 연속합 문제는 다이나믹 프로그래밍을 이용하여 해결하는 코딩테스트로, 역시 문제 해결의 핵심은 점화식을 세우는 것이였다.
지난 문제보다는 점화식을 이해하고 세우는데는 큰 어려움은 없었지만, 역시나 DP Programming은 다른 알고리즘보다 난이도가 있다.
'알고리즘 공부 > 백준' 카테고리의 다른 글
(Python)백준 코딩테스트 연습 - 상자넣기(1965) (0) | 2023.05.24 |
---|---|
(Python)백준 코딩테스트 연습 - 최소 힙(1927) (0) | 2023.05.22 |
(Python)백준 코딩테스트 연습 - 타일링(1793) (0) | 2023.05.11 |
(Python)백준 코딩테스트 연습 - 종이의 개수(1780) (0) | 2023.05.09 |
(Python)백준 코딩테스트 연습 - 크로스워드(1706) (2) | 2023.04.30 |