알고리즘/백준
[백준]1912 연속합(Python)
cha_eyoon
2024. 1. 8. 16:49
https://www.acmicpc.net/problem/1912
1912번: 연속합
첫째 줄에 정수 n(1 ≤ n ≤ 100,000)이 주어지고 둘째 줄에는 n개의 정수로 이루어진 수열이 주어진다. 수는 -1,000보다 크거나 같고, 1,000보다 작거나 같은 정수이다.
www.acmicpc.net
문제 접근
이 문제는 보자마자 dp라고 생각하긴 했다...
리스트의 0,1 ... N까지에서 가장 큰 합을 차곡차곡 dp테이블에 저장하자!
한 시간 동안 열심히 풀었는데 조건의 분기를 잘못했는지 틀렸다.
코드
틀린코드 => 테케를 손으로 써보면 틀리긴 함....
import sys
input = sys.stdin.readline
N = int(input())
dp = [0 for _ in range(N)]
nums = list(map(int, input().split()))
dp[0] = nums[0]
dp[1] = max(dp[0], dp[0]+nums[1], nums[1]) #여기까진 맞..
for i in range(2, N):
if dp[i-2] == dp[i-1]:
dp[i] = max(nums[i], dp[i-1])
else:
dp[i] = max(nums[i], dp[i-1]+nums[i], dp[i-1])
print(dp[i])
print(dp[N-1])
import sys
input = sys.stdin.readline
N = int(input())
dp = [0 for _ in range(N)]
nums = list(map(int, input().split()))
dp[0] = nums[0]
for i in range(1, N):
dp[i] = max(nums[i], dp[i-1]+nums[i])
print(max(dp))
회고
조건이 틀렸다 싶으면 바로 다른 조건을 생각해 보고 조금 더 쉽게 접근하는 것을 찾아야 하는데 자꾸 저 조건이 맞고 max의 비교 대상을 늘렸다가 줄였다가 반복하는 등 헛짓을 해버렸다..
생각보다 너무 답이 단순하다...