coding-test

<백준> 11659번 구간 합 구하기 4 / C++ 풀이

도멩 2024. 3. 16. 17:54
#include <bits/stdc++.h>

using namespace std;

int n, m;
int number[100004];
int total[100004];

int main(void){
    ios::sync_with_stdio(0);
    cin.tie(0);

    cin >> n >> m;

    total[0] = 0;

    for (int k = 1; k <= n; k++){
        cin >> number[k];
        total[k] = total[k - 1] + number[k];
    }

    while (m--){
        int i, j;

        cin >> i >> j;
    
        cout << total[j] - total[i - 1] << '\n'; 
    }
}

중점

1. N과 M의 범위는 10000

2. 1초라는 시간 제한 존재

 

막연하게 입력을 받고 i, j에 대해서 그때 부터 합을 구한다면 시간 초과가 난다. 해당 문제의 풀이를 위해선 DP 알고리즘을 사용해야한다.

입력을 받을 때 미리 n까지의 합을 배열에 저장을 한다. 이후 저장 된 배열에서 바로 합을 출력한다. 이때 배열의 특성을 고려하여서 순서와 범위를 유의하여서 문제를 풀이하여야 한다.

 


 

정답 코드