알고리즘/SW Expert Academy

SWEA level3 - 부분 수열의 합

https://swexpertacademy.com/main/code/problem/problemDetail.do?contestProbId=AV7IzvG6EksDFAXB&categoryId=AV7IzvG6EksDFAXB&categoryType=CODE

 

SW Expert Academy

SW 프로그래밍 역량 강화에 도움이 되는 다양한 학습 컨텐츠를 확인하세요!

swexpertacademy.com


재귀함수를 잘 나타내는 문제

  • 처음 재귀호출은 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