본문 바로가기

Algorithm/Programers - Java

[프로그래머스] 삼총사 / DFS

 

Level.1

 

문제

 

풀이

class Solution {
    
    static boolean[] visited = new boolean[13];
    static int ans = 0;
    
    public void dfs(int[] number, int idx, int sum, int count){
        
        if(count == 3){
            if(sum == 0) 
                ans++;
            return;
        }
        
        for(int i=idx; i<number.length; i++){
            if(!visited[i]){
                visited[i] = true;
                int s = sum + number[i];
                dfs(number, i, s, count+1);
                visited[i] = false;
            }
        }
    }
    
    public int solution(int[] number) {
        int answer = 0;
        
        dfs(number, 0, 0, 0);
        answer = ans;
        
        return answer;
    }
}

DFS(깊이우선탐색)을 활용하여 숫자 3개의 조합(순서가 상관 없는 모임)을 만들었고,

그중 요소를 모두 합하면 0이 되는 조합이 나올 때마다  count + 1 해주었다.

 

 


다른 사람 풀이

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

        for(int i=0; i<number.length-2; i++){
            for(int j=i+1; j<number.length-1; j++){
                for(int k=j+1; k<number.length; k++){
                    if(number[i]+number[j]+number[k]==0) answer++;
                }
            }
        }

        return answer;
    }
}

3중for문을 활용한 풀이 방법이다!