본문 바로가기

Algorithm/Brute Force

(C++) - 백준(BOJ) 2003번 : 수들의 합 2

반응형

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

누적합 이후 brute force로 답을 찾는 문제였습니다.

 

풀이방법

 연속된 수의 합들이 m이되는 것들의 개수를 구하면 되므로 누적합을 먼저 구해줘야합니다.

 1. 1부터 시작해 누적되어 i까지의 합을 구한 값을 sum이라는 배열의 i번째에 저장합니다.

 2. sum[j] - sum[i] == m인 개수를 세준 후 출력합니다.

 

Code

#include <bits/stdc++.h>
using namespace std;
int n, m, ans;
int a[10001], sum[10001];


int main(){
    cin >> n >> m;
    for(int i = 1; i <= n; i++){
        cin >> a[i];
        sum[i] = sum[i-1] + a[i];
    }
    for(int i = 0; i <= n; i++){
        for(int j = i + 1; j <= n; j++){
            if(sum[j] - sum[i] == m) ans++;
        }
    }
    cout << ans << '\n';
}