https://www.acmicpc.net/problem/2003
수열의 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 |