연속합
10 August 2019
문제 : https://www.acmicpc.net/problem/1912
이번은 가장 큰 연속합을 구하는 문제를 풀어보도록 하겠습니다.
#include<stdio.h>
static int* arr;
static int* max_sum;
int main(void) {
int N;
scanf("%d", &N);
arr = new int[N];
max_sum = new int[N];
int max = -1000;
for (int i = 0; i < N; i++)
{
scanf("%d", &arr[i]);
if (i == 0)
{
max_sum[i] = arr[i];
}
else {
if (max_sum[i-1] > 0)
{
max_sum[i] = arr[i] + max_sum[i - 1];
}
else {
max_sum[i] = arr[i];
}
}
if (max_sum[i] > max)
{
max = max_sum[i];
}
}
printf("%d", max);
return 0;
}
가장 큰 연속된 부분합 수열을 만들어야 하므로, 수열의 앞부터 차례로 합을 더해가도록 합니다.현재보다 앞에 있는 값이 0보다 크면 무조건 수가 더 커지므로, 현재의 바로 앞 값이 0보다 크면 계속 더해주고, 0보다 작으면 현재의 값만 저장해줍니다.
마지막까지 체크한 이후, 위의 과정에서 나온 값 중 가장 큰 값을 출력해주도록 합니다.