학습/프로그래머스

[프로그래머스] 삼총사(java)

태기 2023. 2. 6. 17:59

문제

https://school.programmers.co.kr/learn/courses/30/lessons/131705 

 

프로그래머스

코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.

programmers.co.kr


나의 풀이

class Solution {
    int answer = 0;
    
    public int solution(int[] number) {

        int n = number.length;
        boolean[] visited = new boolean[n];

        comb(number, visited, 0, n, 3);

        return answer;
    }

    private void comb(int[] arr, boolean[] visited, int depth, int n, int r) {
        if (r == 0) {
            sumNumber(arr, visited, n);
            return;
        }

        if (depth == n) {
            return;
        }

        visited[depth] = true;
        comb(arr, visited, depth + 1, n, r - 1);

        visited[depth] = false;
        comb(arr, visited, depth + 1, n, r);
    }

    void sumNumber(int[] arr, boolean[] visited, int n) {
        int sum = 0;
        for (int i = 0; i < n; i++) {
            if (visited[i]) {
                sum += arr[i];
            }
        }
        if (sum == 0) {
            answer++;
        }
    }
}

문제 보자마자 생각한 풀이는 조합이였다. nC₃ 을 구하면 된다는 생각으로 조합 알고리즘부터 짜고 3개의 합이 0일 때의 경우를 골라낸다.