백준/실버
[백준 2003번] 수들의 합 2 (C++)
게임개발기원
2023. 7. 3. 21:50
문제링크 : 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
#include <bits/stdc++.h>
using namespace std;
typedef long long ll;
typedef pair<int, int> pii;
const int MAX = 987654321;
int arr[10001];
int main()
{
ios_base::sync_with_stdio(0);
cin.tie(0);
int N, M;
cin >> N >> M;
int sum = 0;
int cnt = 0;
for(int i=1; i<=N; i++)
{
cin >> arr[i];
}
for(int i=1; i<=N; i++)
{
for(int j=i; j<=N; j++)
{
sum+=arr[j]; //누적합
if(sum == M) cnt++; //목표값이면 카운팅
}
sum = 0; //누적합 초기화
}
cout << cnt;
return 0;
}
누적 합 문제이다.
누적 합에 브루트포스를 사용하거나 투포인터를 이용해 풀 수 있는데 나는 브루트포스를 이용해서 풀었다.
단순히 이중 반복문의 인덱스 i, j을 이용해서 각 구간을 설정해주고 구간합을 구하여 M과 같으면 카운팅해준다.
구간이 끝날때마다 sum은 0으로 초기화해줌으로써 다음 구간의 합을 구할때 이상이 없도록 해준다.