본문 바로가기

algorithm

백준 11659번 구간 합 구하기

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

 

아이디어:

1. 현재 인덱스 까지의 총 합을 구하는 배열 int S[] 생성

2. S[i] = S[i - 1] + A[n] (ex A: 1 2 3 4 5, S: 1 3 6 10 15)

3. 구간 i ~ j 까지의 합은 S[j] - S[i - 1]과 동일

4. 문제의 인덱스에 맞춰 배열의 크기는 S[100001], 순회는 (int i = 1, i <= N, i++)

5. S[0] 은 0으로 두고 S[1]부터 A[1] 과 동기화

// 11659

#include <iostream>

using namespace std;

int main() {

	ios::sync_with_stdio(false);
	cin.tie(NULL);
	cout.tie(NULL);

	int N, M, i, j;
	int A[100001] = { 0 };
	int S[100001] = { 0 };

	cin >> N >> M;

	for (int n = 1; n <= N; n++) {
		
		cin >> A[n];
		S[n] = S[n - 1] + A[n];

	}
		
	for (int n = 0; n < M; n++) {
		
		cin >> i >> j;
		cout << S[j] - S[i - 1] << "\n";

	}

	return 0;

}

 

모범답안:

1. 기존 입력받는 배열 A[]는 제외하고 S[]만 사용해도 문제 풀이 가능

2. int temp, S[i] = S[i - 1] + temp

 

int main() {

	ios::sync_with_stdio(false);
	cin.tie(NULL);
	cout.tie(NULL);

	int N, M, i, j, tmp;
	int S[100001] = { 0 };

	cin >> N >> M;

	for (int n = 1; n <= N; n++) {

		cin >> tmp;
		S[n] = S[n - 1] + tmp;

	}

	for (int n = 0; n < M; n++) {

		cin >> i >> j;
		cout << S[j] - S[i - 1] << "\n";

	}

	return 0;

}

 

'algorithm' 카테고리의 다른 글

백준 10986번 나머지 합  (0) 2024.11.24
백준 11660번 구간 합 구하기 5  (0) 2024.11.24
백준 1546번 평균  (0) 2024.11.17
백준 11720번 숫자의 합  (0) 2024.11.17
백준 4153번 직각삼각형  (0) 2024.11.03