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

수열의 i번째 수부터 j번째 수까지의 합 A[i]+A[i+1]+…+A[j-1]+A[j]가 M이 되는 경우의 수를 구하는 문제이다.

n범위가 크지 않아서 단순히 반복문으로 모든 경우를 구해줬다.

 

0번째부터 n-1번째까지 각 자리에서 부터 시작하는 모든 경우를 해준다.

각 자리에서 시작할 때마다 합을 구해준다. 합이 m을 넘어가 버리면 해당 경우는 더 구해줄 필요가 없다.

(수열의 원소들은 자연수이므로 계속 더해줘봤자 m을 넘어가기 때문)

 

합이 m이 되는 경우에는 경우의 수를 저장할 ans값을 증가시키고 break해준다(다음 자리에서 다시 시작)

 

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
#include <iostream>
using namespace std;
 
int n, m;
int num[10000];
 
int main()
{
 
    ios_base::sync_with_stdio(false);
    cin.tie(nullptr);
 
    cin >> n >> m;
 
    for (int i = 0; i < n; i++) {
        cin >> num[i];
    }
    
    int ans = 0;
    
 
    for (int i = 0; i < n; i++) {
        
        int sum = 0;
        for (int j = i; j < n; j++) {
            sum += num[j];
            if(sum > m) break;
            if (sum == m) {
                ans++;
                break;
            }
        }
    }
 
 
    cout << ans << '\n';
 
 
    return 0;
}
Colored by Color Scripter
 

 

'BOJ' 카테고리의 다른 글

[BOJ] 17142. 연구소 3  (0) 2019.07.30
[BOJ] 1806. 부분합  (0) 2019.07.16
[BOJ] 2748. 피보나치 수 2  (0) 2019.07.15
[BOJ] 14889. 스타트와 링크(비트마스크 풀이)  (0) 2019.07.11
[BOJ] 14391. 종이 조각  (0) 2019.07.11

+ Recent posts