본문 바로가기
Online Judge

백준 11659번 구간 합 구하기 4 (C++)

by 함승우 2024. 1. 23.

문제:

수 N개가 주어졌을 때, i번째 수부터 j번째 수까지 합을 구하는 프로그램을 작성하시오.

 

입력:

첫째 줄에 수의 개수 N과 합을 구해야 하는 횟수 M이 주어진다. 둘째 줄에는 N개의 수가 주어진다. 수는 1,000보다 작거나 같은 자연수이다. 셋째 줄부터 M개의 줄에는 합을 구해야 하는 구간 i와 j가 주어진다.

 

출력:

총 M개의 줄에 입력으로 주어진 i번째 수부터 j번째 수까지 합을 출력한다.

 

풀이:

#include <iostream>
#include <vector>

using namespace std;

int main(){
    
    ios::sync_with_stdio(false);
    cin.tie(NULL);
    cout.tie(NULL);
    
    int data_num, query_num, tmp_sum=0, tmp;
    int start, end;
    vector<int> sum;
    cin>>data_num>>query_num;
    
    for (int i=0;i<data_num;i++){
        cin>>tmp;
        tmp_sum += tmp;
        sum.insert(sum.begin()+i, tmp_sum);
    }
    
    for (int i=0;i<query_num;i++){
        cin>>start>>end;
        cout<<sum[end-1]-sum[start-2]<<"\n";
    }
    return 0;
}

 

vector를 쓰는 것을 선호해서 vector를 활용하여 풀었다.

ios::sync_with_stdio(false), cin.tie(NULL), cout.tie(NULL)을 입력해주지 않으면 같은 코드여도 runtime error가 나온다.