백준
11659번 (Silver 3)
이야기prog
2025. 1. 9. 19:59
https://www.acmicpc.net/problem/11659
구간합 알고리즘을 사용하여 해결하는 간단한 문제이다.
#include <iostream>
#include <vector>
int main() {
std::ios::sync_with_stdio(false);
std::cin.tie(NULL);
std::cout.tie(NULL);
int N, query, start, end;
std::cin >> N >> query;
int arr_sum[100001] = {};
for (int i = 1; i <= N; ++i) {
int temp;
std::cin >> temp;
arr_sum[i] = arr_sum[i - 1] + temp;
}
for (int i = 0; i < query; ++i) {
std::cin >> start >> end;
//int sum = arr_sum[end] - arr_sum[start - 1];
std::cout << arr_sum[end] - arr_sum[start - 1] << "\n";
}
return 0;
}
처음에는 vector를 사용해서 풀었으나, 시간초과가 발생하였다.
vector는 동적할당 문제때문에 그런듯 하다.
문제에서 100000이하의 자연수라고 주어졌기 때문에 그냥 크기가 100001인 배열자체를 선언하고 사용하였다.
std::ios_sync_with_stdio(false); std::cin.tie(NULL);, std::cout.tie(NULL);을 사용해서 시간을 줄이고, std::endl;사용대신 "\n"을 사용해서 flush가 발생하는 일을 없애고 다시 수행하니 성공!