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


[알고리즘풀이]

A[N] : 처음에 들어온 값들이 저장되어있는 배열.

dp[N] : 1 ~ N 까지의 합이 저장되어있는 배열.

따라서, dp[K] = dp[K-1] + A[K] 가 성립하고 i ~ j 까지의 구간 합은 dp[j] - dp[ i - 1] 이다.

#include <iostream>
#include <cmath>

using namespace std;

int A[100001] = {};
int dp[100001] = {};

int main()
{
	ios::sync_with_stdio(false);
	cin.tie(0); cout.tie(0);
	
	int N, M;
	cin >> N >> M;

	for (int i = 1; i <= N; i++)
		cin >> A[i];
	dp[1] = A[1];
	for (int i = 1; i <= N; i++)
		dp[i] = A[i] + dp[i-1];
	
	int x, y;
	for (int i = 0; i < M; i++) {
		cin >> x >> y;
			cout << dp[y] - dp[x - 1] << '\n';
	}
	return 0;
}

 

'Problem Solving > BOJ' 카테고리의 다른 글

[BOJ] 3474 - Factorial  (0) 2019.09.29
[BOJ] 2153 - 소수단어  (0) 2019.09.29
[BOJ] 7785 - Easy work  (0) 2019.09.24
[BOJ] 1620 - 나는야 포켓몬 마스터 이다솜  (0) 2019.09.24
[BOJ] 1759 - 암호 만들기  (0) 2019.09.24

+ Recent posts