<프로그래머스 - 깊이/너비 우선 탐색(DFS/BFS)>

- Java


* 타겟넘버

class Solution {
    static int answer = 0;
    public int solution(int[] numbers, int target) {
        dfs(numbers,target,0,0);
        return answer;
    }
    
    static void dfs(int[] numbers,int target, int cnt, int sum){
        if(cnt == numbers.length){
            if(sum==target){
                answer++;
            }
            return;
        }
        dfs(numbers,target,cnt+1,sum+numbers[cnt]);
        dfs(numbers,target,cnt+1,sum-numbers[cnt]);
    }
}

각 원소를 조합해서 더하고 뺀 값의 합이 target이 되는 횟수를 리턴하는 문제

 

cnt는 index의 역할을 하며 0부터 numbers.length-1 까지 증가

numbers.length가 되는 순간은 배열을 다 순회한 것이므로 종료되어야 한다.

이때 여태까지의 sum이 target 값과 같다면 answer를 증가시킨다.

dfs안에서 dfs를 호출하며 sum에 numbers[cnt]를 더하고 빼내가며 문제를 해결한다.

 


* 네트워크 

class Solution {
    static boolean[] check;
    public int solution(int n, int[][] computers) {
        int answer = 0;
        check = new boolean[n];
        for(int i=0; i<n; i++){
            if(check[i]==false){
                dfs(computers,i);
                answer++; 
            }
        }
        return answer;
    }
    static void dfs(int[][] computers,int i){
        check[i] = true; 
        for(int j = 0 ; j<computers.length; j++){
            if(i!=j && computers[i][j]==1 && check[j]==false){
                dfs(computers,j);
            }
        }
    }
}

네트워크의 개수를 구하는 문제 

 

연결되어 있는 애들 끼리 하나.

즉, 컴퓨터1, 컴퓨터2, 컴퓨터3 이 있는데,

컴퓨터1과 컴퓨터2가 연결되어 있고, 컴퓨터 3은 연결된 것이 없다면

네트워크는 두 개 인 것이다.

 

n은 컴퓨터의 갯수로 

boolean 배열을 활용해 각 컴퓨터를 검사했는지 check 한다.

따라서 크기는 n

 

반복문을 돌며

검사를 안한 경우에는 dfs를 통해 더 심층적으로 검사해준다.

이때 i를 넘겨주어 i컴퓨터에 대해 검사할 수 있도록 한다. (그니까 .. 음.. 인덱스 넘겨준다구요,, ㅎ ㅎ..)

이때 answer를 여기서 증가시켜준다. 이게 즉 네트워크의 갯수가 된다.

check가 true였다면 이미 검사가 끝난 것이기 때문이다.

만일 다음께 true면 그 이전 컴퓨터가 얘랑 어딘가 연결이 되어서 검사가 끝난 거겠쥬 ,,~?

또한 연결이 된건 네트워크의 개수로 노 인정이니까 ~

 

dfs를 통해서 심층적인 검사를 하게 된다.

우선 check[i] 를 true로 설정해 이 컴퓨터 check함! 을 표시

이때 이 컴퓨터를 i 컴퓨터라고 하겠다. i컴퓨터가 j 컴퓨터와 연결되어있는지 확인할 것이다.

문제의 제한사항에서 computers[i][i]는 항상 1이었다.

따라서 i는 j와 같지 않아야한다.

i!=j 이고 computers[i][j]가 1(연결)일때, 또한 check[j]가 false일때(j 컴퓨터 검사 x)

dfs를 호출하여 연결된 j컴퓨터를 검사한다. 

 

 

'모각코 > 2022_슈붕팥붕' 카테고리의 다른 글

4회차(01.13) - 결과  (0) 2022.01.13
4회차(01.13) - 목표  (0) 2022.01.13
3회차(01.11) - 목표  (0) 2022.01.11
2회차(01.06) - 결과  (0) 2022.01.06
2회차(01.06) - 목표  (0) 2022.01.06

+ Recent posts