본문 바로가기

백준

백준 11659: 구간합 구하기 4

 

📃 문제: 백준 11659(구간합 구하기 4)

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

 

11659번: 구간 합 구하기 4

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

www.acmicpc.net

 

🥈 난이도: 실버 3

 

😲 사용한 개념: 구간합

S[i] = S[i-1] + A[i]

 

구간합 배열을 미리 구해놓으면, 기존 배열의 일정 범위의 합을 구하는 시간 복잡도가 O(n) -> O(1)로 감소한다.

 

 

 

📖 풀이 사고 과정

 

 

 

👩‍💻 구현 코드

#define _CRT_SECURE_NO_WARNINGS
#include <iostream>
using namespace std;

int main(void) {
    int arr[100000], N, M, start, end, S[100000] = { 0, }, result[100000];
    scanf("%d %d", &N, &M);
    for (int i = 0; i < N; i++) {
        scanf("%d", arr[i]);
        //구간합 구하기
        if (i == 0) S[i] = arr[i];
        else S[i] = S[i - 1] + arr[i];

    }
    for (int i = 0; i < M; i++) {
        scanf("%d %d", &start, &end);
        if (start != 0) result[i] = S[end] - S[start - 1];
        else result[i] = S[end];
    }
    for (int i = 0; i < M; i++) {
        printf("%d\n", result[i]);
    }
    return 0;
}

'백준' 카테고리의 다른 글

백준 11399: ATM  (1) 2024.02.01
백준 1337: 버블 소트  (0) 2024.01.31
백준 11660: 구간합 구하기 5  (0) 2024.01.31
11720(숫자의 합 구하기)  (1) 2024.01.07
백준 - 9012, 9613, 2309  (0) 2023.11.21