본문 바로가기
개발 노트/백준, 프로그래머스 풀이

[백준 11659/c++] 구간 합 구하기 4

by tokkiC 2022. 7. 22.

벡터에 accumulate 를 사용하여 푸니 시간초과가 떴다

그렇다면 속도 향상을 위해서 벡터보다 빠르다는 정적 배열을 사용하고

두 개의 구간을 계산하는 accumulate 대신에 누적 합의 차를 통해 얻은 구간합을 이용하여

구간 계산을 두 번에서 한 번으로 연산과정을 줄여 처리 속도를 높여 해결하였다

주석처리한 부분은 시간초과가 났던 벡터 풀이다

https://www.acmicpc.net/problem/11659

 

11659번: 구간 합 구하기 4

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

www.acmicpc.net

#include <bits/stdc++.h>
using namespace std;

int main(){
	
	ios_base::sync_with_stdio(false);
	cin.tie(NULL);
	
	int n;
	int m;
	int num;
	int i;
	int j;
	int ans;
	int sum = 0;
	int ar[100004];
//	vector<int> v;
	
	cin >> n >> m;
	for (int t = 1;  t <= n; t++)
	{
		cin >> num;
		sum += num;
		ar[t] = sum;
	}
	for (int t = 1; t <= m; t++)
	{
		cin >> i >> j;
		ans = ar[j] - ar[i - 1];
		cout << ans << "\n";
	}
	
	
//	**use case - vector accumulate : time over**
//	cin >> n >> m;
//	for (int t = 0; t < n; t++)
//	{
//		cin >> num;
//		v.emplace_back(num);
//	}
//	for (int t = 0; t < m; t++)
//	{
//		cin >> i >> j;
//		sum = accumulate(v.begin()+i-1,v.begin()+j, 0);
//		cout << sum << "\n";
//	}
	
	return 0;
}

'개발 노트 > 백준, 프로그래머스 풀이' 카테고리의 다른 글

[백준 1120/c++] 문자열  (0) 2022.07.24
[백준 7568/c++] 덩치  (0) 2022.07.23
[백준 1065/c++] 한수  (0) 2022.07.21
[백준 5635/c++] 생일  (0) 2022.07.20
[백준 2579/c++] 계단 오르기  (0) 2022.07.19

댓글