본문 바로가기

문제 노트/백준

구간 합 구하기 4( BOJ 11659 )

(1) 문제

11659. 구간 합 구하기 4 : https://www.acmicpc.net/problem/11659

 

11659번: 구간 합 구하기 4

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

www.acmicpc.net

 

(2) 문제 이해하기

 

(3) 문제 해결하기

 

(4) 소스코드

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
#include <stdio.h>
#include <vector>
#define NMAX 100010
using namespace std;
 
// 입력 변수
int n, m, p, q;
int inp[NMAX];
 
// 누적합 변수
vector< int > sum;
 
// 결과 변수
vector< int > ans;
 
int main() {
    // 입력
    scanf("%d %d"&n, &m);
    for(int i=1;i<=n;i++scanf("%d"&inp[i]);
 
    // 누적합 구하기
    sum.push_back(0);
    for(int i=1;i<=n;i++) sum.push_back(sum.back() + inp[i]);
 
    // 쿼리 처리하기
    for(int i=1;i<=m;i++) {
        scanf("%d %d"&p, &q);
 
        ans.push_back(sum[q] - sum[p] + inp[p]);
    }
 
    // 결과 출력하기
    for(int val:ans) printf("%d\n", val);
}
cs

 

(5) 후기

누적합의 개념을 알 수 있는 문제라고 생각합니다. 배열을 배운 학생들에게 추천하는 문제입니다.

'문제 노트 > 백준' 카테고리의 다른 글

금고 (SAFE) ( BOJ 14932 )  (0) 2021.04.10
구간 합 구하기( BOJ 2042 )  (0) 2021.03.24
구간 합 구하기 3( BOJ 11658 )  (0) 2021.03.16
굉장한 학생( BOJ 2336 )  (0) 2021.03.13
Fine Dining( BOJ 16763 )  (0) 2020.12.13