HOIT_B

[백준] C 1912번 연속합 본문

작고소중한 알고리즘 풀기

[백준] C 1912번 연속합

HOIT_77 2021. 3. 10. 17:23
728x90

[문제]

www.acmicpc.net/problem/1912

 

1912번: 연속합

첫째 줄에 정수 n(1 ≤ n ≤ 100,000)이 주어지고 둘째 줄에는 n개의 정수로 이루어진 수열이 주어진다. 수는 -1,000보다 크거나 같고, 1,000보다 작거나 같은 정수이다.

www.acmicpc.net

 

[접근]

d [n] = d [n-1]+n 이란 식을 세워서 구했다. 

 

주어진 정수가 [10, -4, 3, 1, 5, 6, -35, 12, 21, -1] 이면 

d[0] d[1] d[2] d[3] d[4] d[5] d[6] d[7] d[8] d[9]
10 0 0 0 0 0 0 0 0 0
d[0] d[1] d[2] d[3] d[4] d[5] d[6] d[7] d[8] d[9]
10 6 0 0 0 0 0 0 0 0
d[0] d[1] d[2] d[3] d[4] d[5] d[6] d[7] d[8] d[9]
10 6 9 0 0 0 0 0 0 0
d[0] d[1] d[2] d[3] d[4] d[5] d[6] d[7] d[8] d[9]
10 6 9 10 0 0 0 0 0 0
d[0] d[1] d[2] d[3] d[4] d[5] d[6] d[7] d[8] d[9]
10 6 9 10 15 0 0 0 0 0
d[0] d[1] d[2] d[3] d[4] d[5] d[6] d[7] d[8] d[9]
10 6 9 10 15 21 0 0 0 0
d[0] d[1] d[2] d[3] d[4] d[5] d[6] d[7] d[8] d[9]
10 6 9 10 15 21 -14 0 0 0
d[0] d[1] d[2] d[3] d[4] d[5] d[6] d[7] d[8] d[9]
10 6 9 10 15 21 -14 12 0 0
d[0] d[1] d[2] d[3] d[4] d[5] d[6] d[7] d[8] d[9]
10 6 9 10 15 21 -14 12 33 0
d[0] d[1] d[2] d[3] d[4] d[5] d[6] d[7] d[8] d[9]
10 6 9 10 15 21 -14 12 33 32

가장 큰 합인 33을 출력하면 된다.

 

[코드]

는  C#으로 제출하려고 보니 오류가 난다... 왜 나지? 오랜만에 하려니까 심각하다.

만만한 c로 다시 해봤다. 

#include <stdio.h>
 
int main(void){
 
    int N;
    int number[100010] = {};
    int Dp[100010] = {};
    int max;
    scanf("%d", &N);
 
    for (int i = 1; i <= N; i++)
        scanf("%d", &number[i]);
 
    for (int i = 1; i <= N; i++)
    {
        
        if (Dp[i - 1] + number[i] > number[i]){
            Dp[i] = Dp[i - 1] + number[i];
        }
        else
        {
            Dp[i] = number[i];
        }
    
    }
    max = Dp[1];
    for (int i = 2; i <= N; i++)
            if (max < Dp[i])
                max = Dp[i];
 
    printf("%d\n", max);
}

 

728x90
Comments