코딩테스트/백준

[백준][C++]11659번 구간 합 구하기 4

윤깡패 2023. 9. 8. 21:36

문제

https://www.acmicpc.net/problem/11659

 

11659번: 구간 합 구하기 4

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

www.acmicpc.net

 

 

풀이

  • 합 배열 공식 : S[i] = S[i - 1] + A[i]
  • 구간 합 공식 : S[j] - S[i - 1]

 

[코딩/알고리즘] - 구간 합 알고리즘

 

구간 합 알고리즘

구간 합 알고리즘 연속적으로 나열된 수가 있을 때, 맨 앞부터 특정 위치까지의 합을 미리 구해 놓고 사용하는 알고리즘 시간 복잡도 - O(1) 구간 합 핵심 이론 합 배열 S를 만드는 공식 S[i] = A[0] +

soobin0821.tistory.com

 

 

코드

#include <iostream>
#include <vector>
using namespace std; 

int main()
{
  ios::sync_with_stdio(false);
  cin.tie(NULL);
  cout.tie(NULL);

  int N, M;
  cin >> N >> M;

  vector<int> A(N);
  vector<int> sum(N, 0);
  for(int n = 0; n < N; n++)
  {
    cin >> A[n];
    
    // 구간 합 구하기
    if(n == 0)
    {
      sum[n] = A[n];
    }
    else
    {
      sum[n] = sum[n - 1] + A[n];
    }
  }

  for(int n = 0; n < M; n++)
  {
    int i, j;
    cin >> i >> j;	// 질의 범위 받기

    cout << sum[j - 1] - sum[i - 2] << "\n";	// 부분 합 출력
  }
  
  return 0;
}

 

 

 

 

 

728x90