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) 이 나오게 된다.