재귀함수를 잘 나타내는 문제
- 처음 재귀호출은 arrIdx부분 arr을 선택하겠다는 뜻
- 두번째는 선택 안 하겠다는 뜻
solution(arrIdx + 1, sum + arr[arrIdx]);
solution(arrIdx + 1, sum);
/*
-- 재귀사용
*/
#include<iostream>
using namespace std;
int N, K;
int arr[20];
int answer;
void solution(int arrIdx, int sum) {
if (sum == K) {
answer++;
return;
}
if (arrIdx == N) {
return;
}
solution(arrIdx + 1, sum + arr[arrIdx]);
solution(arrIdx + 1, sum);
}
int main() {
int t;
cin >> t;
for (int test = 1; test <= t;test++) {
cin >> N >> K;
answer = 0;
for (int i = 0; i < N; i++) {
cin >> arr[i];
}
solution(0,0);
printf("#%d %d\n", test, answer);
}
}
'알고리즘 > SW Expert Academy' 카테고리의 다른 글
[Swea - 1868] 파핑파핑 지뢰찾기 (0) | 2020.11.05 |
---|---|
[Swea - 5643] 키 순서 (0) | 2020.11.04 |
[Swea - 1953] 탈주범 검거 (0) | 2020.11.03 |
[swea - 10888] D4 - 음식배달 (0) | 2020.10.19 |
SWEA level3 - 3282 0/1 knapsack (0) | 2020.09.22 |