[프로그래머스]네트워크.java

전영서·2021년 9월 5일
0

Algorithm

목록 보기
25/89

1.문제

2.코드

class Solution {
    
    static int[] parent;
	
	
	//자기 자신을 부모로 하는 배열 생성
	public static void make(int n) {
		parent = new int[n];
		
		for(int i=0; i<n; i++) {
			parent[i] = i;
		}
		
	}
	//부모를 찾는 함수
	public static int find(int n) {
		if(parent[n]==n) return n;
		
		return parent[n] = find(parent[n]);
		
	}
	
	//두개를 연결시켜주는 함수
	//부모가 다르면 연결 부모가 같으면 아무동작 x
	public static void link(int a, int b) {
		int pa = find(a);
		int pb = find(b);
		
		if(pa==pb) return;
		
		parent[pb] = pa; 
	}
    
  
  
    public int solution(int n, int[][] computers) {
        int answer = 0;
        
        make(n);
		//연결시키기
		for(int i=0; i<n; i++) {
			for(int j=0; j<n; j++) {
				if(i==j) continue;
				
				if(computers[i][j] == 1) link(i,j); 
			}
		}
		//부모 통일
		for(int i=0; i<n; i++) {
			find(i);
		}
    boolean[] check = new boolean[n];
    //부모 갯수 세기    
		for(int i=0; i<n; i++) {
			check[find(i)] = true;
		}
		
		for(int i=0; i<n; i++) {
			if(check[i]) answer ++;
		}
        
        return answer;
    }
}

3.Review

저렇게 풀면 될거같아서 풀었는데 알고리즘 이름은 모르겠다...

profile
꾸준히 성실하게

0개의 댓글