본문 바로가기
알고리즘/DFS

[프로그래머스] 네트워크 / 자바

by 순원이 2024. 4. 22.

문제         

 

프로그래머스

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

programmers.co.kr

1 번째 시도   

  • DFS 문제
  • 인접행렬 탐색할 때 대각선 기준으로 위 아래 둘 중 하나만 봐도 된다.
    • 이거 구현하려니 머리가 터질 것 같았다 패스 ~
  • 숫자 0(의미적1)부터 살펴본다. 
    • 방문한적이 없다면 answer ++
    • dfs로 숫자 0 과 관련되어 있는 숫자들을 다 살펴본다.
    • dfs에 거쳐지면 visted = true
    • 해당 노드에 인정행렬을 흝어보며 연관되어 있는 숫자들을 살펴본다(dfs)
      • 즉, 재귀호출
import java.util.*;

class Solution {
     
    
    public int solution(int n, int[][] computers) {
        boolean[] visited = new boolean[n];
        int answer =0;
        
        for(int i = 0; i < n; i++) {
            if(!visited[i]) {
                answer++;
                dfs(i, visited, computers);
            }
        }
        return answer;
    }
    
    public void dfs(int node, boolean[] visited, int[][] computers) {

        visited[node] = true;
        
        for(int i =0; i < computers[0].length; i++) {
            if(!visited[i] && computers[node][i] == 1) {
                dfs(i, visited, computers);
            }
        }
    }
}