Algorithm 🧑🏻‍💻/백준(BOJ)

[백준,c++] 1912번 - 연속합

dkswnkk 2022. 3. 15. 01:32

문제

 

1912번: 연속합

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

www.acmicpc.net

 

코드

#include <iostream>

using namespace std;

int arr[100001];
int dp[100001];
int main(){
    ios_base::sync_with_stdio(false);
    cin.tie(0);
    
    int n; cin>>n;
    
    for(int i=0; i<n; i++) cin>>arr[i];
    
    dp[0] = arr[0];
    int ans = dp[0];
    for(int i=1; i<n; i++){
        dp[i] = max(arr[i], dp[i-1]+arr[i]);
        ans = max(ans, dp[i]);
        
    }
    
    cout<<ans;
}

 

풀이(7분)

(현재 배열의 값 vs 이전까지의 합 + 현재 배열) 중 큰 값을 계속 메모이제이션 하면서 결괏값을 구해 낼 수 있습니다.