우노
[DP] 백준 1912번 “연속합” Python 풀이 본문
문제 링크
풀이
- i번째 이전까지 연속된 부분 숫자들의 합을 계산하여, 최댓값을 그때그때 기록합니다.
- i번째 이전까지 연속된 부분 숫자들의 합이, 그냥 i번째 숫자보다 작은 경우, 이전의 기록들은 무의미해집니다.
- 해당 경우엔, 다시 i번째 숫자부터 연속된 부분 숫자들의 합을 구하면 됩니다.
- 예제 입력을 사용해, 시뮬레이션을 진행하면 이해가 쉽습니다.
- [2, 1, -4, 3, 4, -4, 6, 5, -5, 1] 이 주어진 경우
- [2, 3, -1, 3, 7, 3, 9, 14, 9, 10] 이 됩니다.
코드
import sys
# 정수 n
n = int(sys.stdin.readline())
# n개의 정수로 이루어진 수열
arr = list(map(int, sys.stdin.readline().rstrip().split(" ")))
# 연속된 부분 숫자들의 합 (첫 번째 요소는 수열의 첫 번째 숫자로 초기화)
sum = [arr[0]]
for i in range(1, n):
# i번째 이전까지 연속된 부분 숫자들의 합보다 i번째 숫자가 큰 경우,
# 다시 i번째 숫자부터 연속된 부분 숫자들의 합을 구하면 됩니다.
sum.append(max(sum[i-1] + arr[i], arr[i]))
# 연속된 부분 숫자들의 합 중 최댓값 출력
print(max(sum))
'Algorithm > Dynamic Programming' 카테고리의 다른 글
[DP] 백준 11053번 “가장 긴 증가하는 부분 수열” Python 풀이 (0) | 2022.11.19 |
---|---|
[DP] 백준 11055번 “가장 큰 증가 부분 수열” Python 풀이 (0) | 2022.11.19 |
[DP] 백준 12852번 “1로 만들기 2” Python 풀이 (0) | 2022.11.15 |
[DP] 백준 1958번 “LCS 3” Python 풀이 (0) | 2022.10.13 |
[DP] 백준 2169번 “로봇 조종하기” Python 풀이 (1) | 2022.10.13 |
Comments