Java
프로그래머스: 삼총사
Daeryuk Kim
2024. 1. 20. 13:55
class Solution {
public int solution(int[] number) {
int answer = 0;
for(int i = 0; i < number.length; i++) {
for(int j = i + 1; j < number.length; j++) {
for(int k = j + 1; k < number.length; k++) {
if(number[i] + number[j] + number[k] == 0) {
answer++;
}
}
}
}
return answer;
}
public static void main(String[] args) {
// 삼총사이므로 3개를 더해서 0이 되어야 한다. 총 경우의 수를 구하면 된다.
int[] number = {-2, 3, 0, 2, -5};
Solution sol = new Solution();
int result = sol.solution(number);
System.out.println(result);
}
}
for문 3개를 해도 된다.
조합으로 해결할 수 있는 문제이기에 기왕 하는거 조합의 모든 경우를 출력하는 것도 해보자.
import java.util.Arrays;
public class Solution {
public static void main(String[] args) {
int[] numbers = {-2, 3, 0, 2, -5};
findZeroSumCombinations(numbers);
}
private static void findZeroSumCombinations(int[] numbers) {
Arrays.sort(numbers);
for (int i = 0; i < numbers.length - 2; i++) {
if (i > 0 && numbers[i] == numbers[i - 1]) {
continue; // 중복된 숫자는 건너뛰기
}
int left = i + 1;
int right = numbers.length - 1;
while (left < right) {
int sum = numbers[i] + numbers[left] + numbers[right];
if (sum == 0) {
System.out.println("조합: (" + numbers[i] + ", " + numbers[left] + ", " + numbers[right] + ")");
left++;
right--;
// 중복된 숫자는 건너뛰기
while (left < right && numbers[left] == numbers[left - 1]) {
left++;
}
while (left < right && numbers[right] == numbers[right + 1]) {
right--;
}
} else if (sum < 0) {
left++;
} else {
right--;
}
}
}
}
}
조합: (-5, 2, 3)
조합: (-2, 0, 2) 이 나오게 된다.