ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • [BaekJoon] 1912. 연속합
    알고리즘 2020. 7. 17. 15:55

    1912. 연속합

    Dynamic Programming을 이용한, 아주 간단한 연속합을 구하는 문제이다.

    시작 index인 0에 대하여서는 DP[0]=arr[0]값을 설정해 준 뒤, i=1부터 입력받은 정수 n까지는 for문을 탐색하며 연속합을 갱신한다.

    DP[i-1]+arr[i] 값, 즉 이전 index까지의 최대 연속합에 현재 index의 value인 arr[i]값을 더한 값과, 현재 index의 value인 arr[i]값 중 더 큰 값을 DP[i]값으로 설정한다.

        DP[0]=arr[0];
        for(i=1;i<cnt;i++){
            DP[i]=maxValue(arr[i], DP[i-1]+arr[i]);
        }

    DP배열의 값 중 가장 큰 값이, 가장 큰 연속합이 될 것이다.

     

    전체 코드이다.

    #include <stdio.h>
    #include <stdlib.h>
    
    int maxValue(int a,int b){
        return a>b ? a : b;
    }
    int DP[100001] = {0,};
    int main(){
    
        int arr[100001]={0,};
        int i,cnt,n;
        int result;
        
        scanf("%d",&cnt);
        
        for(i=0;i<cnt;i++){
            scanf("%d",&n);
            arr[i]=n;
        }
        
        DP[0]=arr[0];
        for(i=1;i<cnt;i++){
            DP[i]=maxValue(arr[i], DP[i-1]+arr[i]);
        }
        
        result=-1000;
        for(i=0;i<cnt;i++)
            result=maxValue(result, DP[i]);
        
        printf("%d\n",result);
        return 0;
    }
    

    '알고리즘' 카테고리의 다른 글

    [BaekJoon] 1699. 제곱수의 합  (0) 2020.07.21
    [BaekJoon] 11054. 가장 긴 바이토닉 부분 수열  (0) 2020.07.17

    댓글

Designed by Tistory.