📃 문제: 백준 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 |