BOJ : https://www.acmicpc.net/problem/1182
dfs를 통해 모든 수를 다 방문하면서 합이 같아지는 부분이 있는지 확인했다.
1개는 현재의 합에서 현재 방문한 수를 빼고 다음수를 확인하는 재귀,
1개는 현재의 합을 그대로 다음수를 확인하는 재귀
총 2개의 재귀를 이용하면 쉽게 해결된다.
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
|
#include <cstdio>
#include <vector>
using namespace std;
int N, S, check;
int arr[20];
void dfs(int start, int sum) {
sum += arr[start];
if (start >= N)
return;
if (sum == S) {
check++;
}
dfs(start + 1, sum - arr[start]);
dfs(start + 1, sum);
}
int main() {
scanf("%d%d", &N, &S);
for (int i = 0; i < N; i++) {
scanf("%d", &arr[i]);
}
dfs(0,0);
printf("%d", check);
}
http://colorscripter.com/info#e" target="_blank" style="color:#4f4f4f; text-decoration:none">Colored by Color Scripter
|
'algorithm > BOJ' 카테고리의 다른 글
BOJ 14501번 퇴사 (0) | 2019.04.07 |
---|---|
6603번 : 로또 - junnnho (0) | 2019.04.07 |
14502번 : 연구소 - Junnnho (0) | 2019.04.07 |
16235번 : 나무제테크 - Junnnho (0) | 2019.04.07 |
BOJ 1463번 1로 만들기 (0) | 2019.04.07 |