티스토리 뷰

programmers.co.kr/learn/courses/30/lessons/43162

 

코딩테스트 연습 - 네트워크

네트워크란 컴퓨터 상호 간에 정보를 교환할 수 있도록 연결된 형태를 의미합니다. 예를 들어, 컴퓨터 A와 컴퓨터 B가 직접적으로 연결되어있고, 컴퓨터 B와 컴퓨터 C가 직접적으로 연결되어 있

programmers.co.kr

 

문제는 위와 같으며, dfs를 통해 문제를 해결하였습니다.

 

모든 컴퓨터가 연결되어 있는지 한번씩은 확인을 해야하므로 이를 확인할 수 있는 boolean 타입의 배열을 생성합니다. 이 배열을 순서대로 반복하면서 해당 위치의 컴퓨터를 아직 방문하지 않은 경우 dfs를 통해 연결된 모든 컴퓨터를 방문처리합니다. 그러고 나면 하나의 네트워크를 확인한 것이므로 answer를 증가시킵니다.

 

dfs 메소드를 살펴보면 먼저 해당 컴퓨터를 방문한 것으로 처리하고, 이 컴퓨터에 대한 연결 정보를 모두 확인하면서 연결이 되어있지만 아직 방문하지 않은 다음 컴퓨터를 기준으로 하여 다시 dfs 메소드를 수행하게 됩니다.

 

JAVA 코드는 다음과 같습니다.

import java.util.*;

class Solution {
    public int solution(int n, int[][] computers) {
        int answer = 0;

        boolean[] visited = new boolean[n]; // 연결된 컴퓨터를 확인했는지 체크
        for (int i = 0; i < visited.length; i++) {
            if (!visited[i]) {  // 아직 해당 컴퓨터를 확인하지 않은 경우
                dfs(computers, visited, i);  // 기준 컴퓨터와 연결된 컴퓨터를 모두 확인
                answer++;
            }
        }

        return answer;
    }

    private static void dfs(int[][] computers, boolean[] visited, int start) {
        visited[start] = true;  // 기준 컴퓨터를 확인한 것으로 처리하고
        for (int i = 0; i < computers[start].length; i++) {
            if (computers[start][i] == 1 && !visited[i]) {  // 기준 컴퓨터와 연결되어 있지만 아직 확인하지 않은 경우
                dfs(computers, visited, i);  // 다시 다음 컴퓨터를 기준으로 연결된 컴퓨터 모두 확인
            }
        }
    }
}

 

'알고리즘' 카테고리의 다른 글

[프로그래머스] 소수 찾기  (0) 2021.04.07
[프로그래머스] 더 맵게  (0) 2021.04.05
[프로그래머스] 주식 가격  (0) 2021.04.02
[프로그래머스] 베스트앨범  (0) 2021.04.01
[프로그래머스] 위장  (0) 2021.03.31
댓글
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
«   2024/05   »
1 2 3 4
5 6 7 8 9 10 11
12 13 14 15 16 17 18
19 20 21 22 23 24 25
26 27 28 29 30 31
글 보관함