728x90
반응형
🔗 문제 링크
https://www.acmicpc.net/problem/11659
11659번: 구간 합 구하기 4
첫째 줄에 수의 개수 N과 합을 구해야 하는 횟수 M이 주어진다. 둘째 줄에는 N개의 수가 주어진다. 수는 1,000보다 작거나 같은 자연수이다. 셋째 줄부터 M개의 줄에는 합을 구해야 하는 구간 i와 j
www.acmicpc.net
👩💻 코드
#include <iostream>
using namespace std;
int main(){
ios::sync_with_stdio(false);
cin.tie(NULL);
cout.tie(NULL);
int N = 0;
int M = 0;
cin >> N >> M;
int sum[100001] = {};
for(int n=1; n<=N; n++){
int temp;
cin >> temp;
sum[n] = sum[n-1] + temp;
}
int i = 0;
int j = 0;
for(int n=0; n<M; n++){
cin >> i >> j;
cout << sum[j] - sum[i-1] << "\n";
}
}
✏️ 풀이
핵심은 구간합이라는 알고리즘이다!
무려 시간 복잡도를 O(N)에서 O(1)로 줄일 수 있다.
그리고 시간 단축을 위한 C++ 팁!
종종 시간 초과를 할 경우 활용하자.
ios::sync_with_stdio(false);
C의 stdio와 C++의 iostream의 동기화 비활성화, C++ 독립 버퍼 사용으로 수행 속도가 빨라지는 효과가 발생한다.
cin.tie(NULL); cout.tie(NULL);
하나로 묶인 두 스트림을 풀어 cin을 수행하기 전 기본적으로 cout 출력 버퍼를 지우는 작업을 수행하는 과정을 생략하여 속도가 빨라지는 효과가 발생한다.
풀이와 팁의 출처는 Do it! 알고리즘 코딩 테스트 C++편에서 발췌하였습니다.
728x90
반응형
'코딩테스트 > 백준' 카테고리의 다른 글
[백준] 2018번 : 수들의 합 5 (2) | 2024.02.29 |
---|---|
[백준] 10986번 : 나머지 합 (1) | 2024.02.09 |
[백준] 11660번 : 구간 합 구하기 5 (1) | 2024.02.06 |
[백준] 1546번 : 평균 (0) | 2024.02.01 |
[백준] 11720번 : 숫자의 합 (0) | 2024.02.01 |