코딩테스트
기타 문제풀이(합분해 문제 업그레이드)
leeeehhjj
2023. 5. 14. 17:44
숫자 k개를 더해서 n이 되는 경우의 수 구하기(k개는 모두 1이상이어야 하고 중복 불가능)
import java.util.Scanner;
class Program {
static int count = 0;
static boolean[] visited;
public static void combinationSum(int depth, int target, int idx, int sum, int n, int k) {
if (depth == k) { // 합이 n과 같으면 경우의 수 1 증가
if (sum == target) count++;
return;
}
for (int i = idx; i <= n; i++) {
if (!visited[i]) {
int newSum = sum + i;
if (newSum <= target) {
visited[i] = true;
combinationSum(depth+1, target, i + 1, newSum, n, k);
visited[i] = false;
}
else return;
}
}
}
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
int n = scanner.nextInt(); // 합이 n이 되어야 함
int k = scanner.nextInt(); // 숫자 k개를 더해서 합이 n이 되어야 함
visited = new boolean[n+1];
combinationSum(0, n, 1, 0,n,k);
System.out.println(count);
}
}