GitHubSeob

C++ / 백준 / 2003 / 수들의 합 2 본문

Baekjoon/Silver

C++ / 백준 / 2003 / 수들의 합 2

GitHubSeob 2021. 10. 3.

문제

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

 

2003번: 수들의 합 2

첫째 줄에 N(1 ≤ N ≤ 10,000), M(1 ≤ M ≤ 300,000,000)이 주어진다. 다음 줄에는 A[1], A[2], …, A[N]이 공백으로 분리되어 주어진다. 각각의 A[x]는 30,000을 넘지 않는 자연수이다.

www.acmicpc.net

문제풀이

메모이제이션을 이용했다.

idx는 0부터 N-1까지, idx2는 idx부터 N-1까지로 둔다.

idx는 더하려는 첫 번째 원소, idx2는 더하려는 마지막 원소이다.

따라서 idx부터 idx2까지 더한 값을 구하고, M인지 판별을 한다.

각각의 값은 자연수이므로 sum이 M을 넘어가면 더할 때마다 무조건 커지므로 효율성을 위해 break를 한다.

모든 경우의 수를 판별하였으면 answer을 출력한다.

 

코드

#include <iostream>
#include <vector>
using namespace std;
int N, M;

int main() {
	ios::sync_with_stdio(false);
	cin.tie(NULL);

	cin >> N >> M;
	int idx(0);
	int idx2(0);
	int answer(0);
	vector<int>seq(N, 0);

	for (idx = 0; idx < N; ++idx)
		cin >> seq[idx];

	for (idx = 0; idx < N; ++idx) {
		int sum(0);
		for (idx2 = idx; idx2 < N; ++idx2) {
			sum += seq[idx2];
			if (sum == M) {
				++answer;
				break;
			}
			else if (sum > M) break;
		}
	}
	cout << answer;
}

'Baekjoon > Silver' 카테고리의 다른 글

C++ / 백준 / 1158 / 요세푸스 문제  (0) 2021.10.27
C++ / 백준 / 1406 / 에디터  (0) 2021.10.26
C++ / 백준 / 1182 / 부분수열의 합  (0) 2021.10.03
C++ / 백준 / 6603 / 로또  (0) 2021.10.03
C++ / 백준 / 3184 / 양  (0) 2021.09.24