PS
[C++] 1912: 연속합
왕방토
2022. 2. 4. 03:04
728x90
실버 Ⅱ
#include <iostream>
using namespace std;
int N;
int arr[100000];
int dp[100000];
int main() {
scanf("%d", &N);
for (int i = 0; i < N; i++) {
scanf("%d", &arr[i]);
}
dp[0] = arr[0];
int ans = dp[0];
for (int i = 1; i < N; i++) {
if (dp[i - 1] > 0) dp[i] = arr[i] + dp[i - 1];
else dp[i] = arr[i];
if (dp[i] > ans) ans = dp[i];
}
printf("%d", ans);
}
투포인터로 첨에 해보려 했는데
배열의 원소에 마이너스가 있어서 안되는 것으로 추측...
사실 투포인터 원리를 제대로 다 이해 못한거 같기도 하고ㅋㅋ
아무튼 내 추측으로는 마이너스땜에 안되는거같음
포함하거나~~ 에서 포함당하는거는 dp[i-1] 인데 dp[i-1]이 나타내는건
수열 i-1 원소까지의 연속합 중 가장 큰 값이다.
그래서.. 그냥 dp[i-1]이 양수이기만 하면 그 값을 반영해서 넣어주면 된다
0일경우는 둘 중 어떤 액션을 취하든 의미 없기 때문에 if문/else문 중 암데나 넣어주면 됨