프로그래머스

프로그래머스 네트워크 - Java

리콜 2024. 4. 9. 21:50

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

 

프로그래머스

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

programmers.co.kr

 

dfs연습 문제

n개의 컴퓨터가 있을때 컴퓨터 끼리의 연결정보를 담은 2차원 배열이 주어진다.

 

그때 네트워크의 갯수를 구하는 문제이다.

 

자기 자신은 항상 0으로 주기 때문에 별다른 처리가 필요하지 않았다.

 

 

class Solution {
    //[[1, 1, 0], 
    // [1, 1, 0], 
    // [0, 0, 1]]
    
    int answer = 0;

    public void dfs(int[][] computers, int[] visited, int num){
        
        visited[num] = 1;
        
        for(int i =0; i < computers[num].length;i++){
            if(visited[i] == 0 && computers[num][i] == 1){
                dfs(computers, visited, i);
            }
        }
        
    }
    public int solution(int n, int[][] computers) {
        //각 컴퓨터는 0부터 n-1인 정수로 표현합니다.
        //i번 컴퓨터와 j번 컴퓨터가 연결되어 있으면 computers[i][j]를 1로 표현합니다.
        //computer[i][i]는 항상 1입니다.
        int[] visited = new int[n];
        
        for(int i =0; i< n; i++){
            if(visited[i] == 0){
                answer++;
                dfs(computers, visited, i);
            }
        }
        
        return answer;
    }
}

 

다만 

  
        for(int i =0; i< n; i++){
            if(visited[i] == 0){
                answer++;
                dfs(computers, visited, i);
            }
        }

에서 visited는 dfs함수에 전달된뒤 dfs함수내의 매개변수로서 수정한뒤 전달되어

메인함수에서는 visited처리가 안될줄 알고 많은 고민을 하였는데 처리가 되었다...

아직 java에대한 이해가 부족한 것인가 하며 찾아 보았는데

자바에서 배열은 객체로 참조의 형태를 가지기 때문에 참조가 복사가 되어 전달 된다.
따라서 내가 처음 생각한대로 처리하려면 Arrays.copyOf()를 사용해야한다!!!

 

반응형