티스토리 뷰
상기 두 함수는 같은 역할을 함!
for (int i = 0; i < numbers.length; i++) {
for (int j = i + 1; j < numbers.length; j++) {
for (int k = j + 1; k < numbers.length; k++) {
for (int l = k + 1; l < numbers.length; l++) {
// 여기서 numbers[i], numbers[j], numbers[k], numbers[l]로 네 개의 숫자를 선택함
if (numbers[i] + numbers[j] + numbers[k] + numbers[l] == 0) {
// 조건을 만족하면 카운트
}
}
}
}
}
public class CombinationExample {
public static int countZeroSumCombinations(int[] numbers) {
return combination(numbers, 0, 4, 0);
}
private static int combination(int[] numbers, int start, int r, int sum) {
// 기저 조건: 4개의 숫자를 모두 선택했을 때
if (r == 0) {
return sum == 0 ? 1 : 0; // 합이 0이면 1을 반환, 아니면 0 반환
}
int count = 0;
for (int i = start; i < numbers.length; i++) {
// numbers[i]를 포함한 조합을 만들고, r을 1 감소시켜 재귀 호출
count += combination(numbers, i + 1, r - 1, sum + numbers[i]);
}
return count;
}
public static void main(String[] args) {
int[] numbers = {-2, 3, 0, 2, -5, 1, -1};
int result = countZeroSumCombinations(numbers);
System.out.println("합이 0이 되는 경우의 수: " + result);
}
}