[ BOJ / C++ ] 11659번 구간 합 구하기 4

황승환·2021년 7월 16일
0

C++

목록 보기
8/65

이번 문제는 쉽게 생각하면 받은 두 인덱스를 for문에 넣어서 구하면 된다. 그러나 이런 방식으로 구하면 시간 초과가 발생한다.
문제의 해결 방법은 문제 이름에 있었다. 구간 합을 구하면 간단하게 풀 수 있는 문제다.

  • 배열을 입력받는 for문에서 구간합 배열을 같이 구해준다.
  • 두 인덱스 간의 합은 구간합 psum[b]-psum[a-1]과 같다.

Code

#include <iostream>
#define MAX 100001
using namespace std;

int n, m;
int arr[MAX];
int psum[MAX];
int a, b;

void Input(){
    cin>>n>>m;
    for(int i=1; i<=n; i++){
        cin>>arr[i];
        if(i==1)
            psum[i]==arr[i];
        psum[i]=psum[i-1]+arr[i];
    }
}

int Solution(int a, int b){
    return psum[b]-psum[a-1];
}

int main(){
    ios::sync_with_stdio(false);
    cin.tie(0);
    cout.tie(0);
    Input();
    for(int j=0; j<m; j++){
        cin>>a>>b;
        cout<<Solution(a, b)<<'\n';
    }
    return 0;
}

profile
꾸준함을 꿈꾸는 SW 전공 학부생의 개발 일기

0개의 댓글