[Algorithm] ๐ŸŒํ”„๋กœ๊ทธ๋ž˜๋จธ์Šค ๋„คํŠธ์›Œํฌ

HaJingJingยท2021๋…„ 6์›” 14์ผ
0

Algorithm

๋ชฉ๋ก ๋ณด๊ธฐ
65/119

0. ๋ฌธ์ œ

๋„คํŠธ์›Œํฌ๋ž€ ์ปดํ“จํ„ฐ ์ƒํ˜ธ ๊ฐ„์— ์ •๋ณด๋ฅผ ๊ตํ™˜ํ•  ์ˆ˜ ์žˆ๋„๋ก ์—ฐ๊ฒฐ๋œ ํ˜•ํƒœ๋ฅผ ์˜๋ฏธํ•ฉ๋‹ˆ๋‹ค. ์˜ˆ๋ฅผ ๋“ค์–ด, ์ปดํ“จํ„ฐ A์™€ ์ปดํ“จํ„ฐ B๊ฐ€ ์ง์ ‘์ ์œผ๋กœ ์—ฐ๊ฒฐ๋˜์–ด์žˆ๊ณ , ์ปดํ“จํ„ฐ B์™€ ์ปดํ“จํ„ฐ C๊ฐ€ ์ง์ ‘์ ์œผ๋กœ ์—ฐ๊ฒฐ๋˜์–ด ์žˆ์„ ๋•Œ ์ปดํ“จํ„ฐ A์™€ ์ปดํ“จํ„ฐ C๋„ ๊ฐ„์ ‘์ ์œผ๋กœ ์—ฐ๊ฒฐ๋˜์–ด ์ •๋ณด๋ฅผ ๊ตํ™˜ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ๋”ฐ๋ผ์„œ ์ปดํ“จํ„ฐ A, B, C๋Š” ๋ชจ๋‘ ๊ฐ™์€ ๋„คํŠธ์›Œํฌ ์ƒ์— ์žˆ๋‹ค๊ณ  ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

์ปดํ“จํ„ฐ์˜ ๊ฐœ์ˆ˜ n, ์—ฐ๊ฒฐ์— ๋Œ€ํ•œ ์ •๋ณด๊ฐ€ ๋‹ด๊ธด 2์ฐจ์› ๋ฐฐ์—ด computers๊ฐ€ ๋งค๊ฐœ๋ณ€์ˆ˜๋กœ ์ฃผ์–ด์งˆ ๋•Œ, ๋„คํŠธ์›Œํฌ์˜ ๊ฐœ์ˆ˜๋ฅผ return ํ•˜๋„๋ก solution ํ•จ์ˆ˜๋ฅผ ์ž‘์„ฑํ•˜์‹œ์˜ค.

์ œํ•œ์‚ฌํ•ญ
์ปดํ“จํ„ฐ์˜ ๊ฐœ์ˆ˜ n์€ 1 ์ด์ƒ 200 ์ดํ•˜์ธ ์ž์—ฐ์ˆ˜์ž…๋‹ˆ๋‹ค.
๊ฐ ์ปดํ“จํ„ฐ๋Š” 0๋ถ€ํ„ฐ n-1์ธ ์ •์ˆ˜๋กœ ํ‘œํ˜„ํ•ฉ๋‹ˆ๋‹ค.
i๋ฒˆ ์ปดํ“จํ„ฐ์™€ j๋ฒˆ ์ปดํ“จํ„ฐ๊ฐ€ ์—ฐ๊ฒฐ๋˜์–ด ์žˆ์œผ๋ฉด computers[i][j]๋ฅผ 1๋กœ ํ‘œํ˜„ํ•ฉ๋‹ˆ๋‹ค.
computer[i][i]๋Š” ํ•ญ์ƒ 1์ž…๋‹ˆ๋‹ค.

1. ์•„์ด๋””์–ด

๐Ÿ’ก BFS
๐Ÿ’ก ์ปดํ“จํ„ฐ 0์—์„œ ์‹œ์ž‘ํ•ด์„œ, ์—ฐ๊ฒฐ๋˜์–ด ์žˆ๋Š” ์ปดํ“จํ„ฐ๋ฅผ ๋ชจ๋‘ queue์— ๋„ฃ์Œ
๐Ÿ’ก ์—ฐ๊ฒฐ๋˜์–ด ์žˆ์ง€ ์•Š์€ ์ปดํ“จํ„ฐ๋“ค์ด ์žˆ์œผ๋ฉด, count๋ฅผ ํ•˜๊ณ  ๋‹ค์‹œ ์ƒˆ๋กœ์šด queue๋ฅผ ์ƒ์„ฑํ•ด ๋ฐ˜๋ณตํ•จ

2. ํ•ต์‹ฌ ํ’€์ด

1) ์ปดํ“จํ„ฐ 0์—์„œ ์‹œ์ž‘ํ•ด์„œ, ์—ฐ๊ฒฐ๋˜์–ด ์žˆ๋Š” ์ปดํ“จํ„ฐ๋ฅผ ๋ชจ๋‘ queue์— ๋„ฃ์Œ

while(!q.isEmpty()){
            int now = q.poll();
            
            for(int idx=0; idx<n; idx++){
                if(computers[now][idx] == 1 && visited[idx] == false){
                    visited[idx] = true;
                    q.add(idx);
                }
            }
        }

2) ์—ฐ๊ฒฐ๋˜์–ด ์žˆ์ง€ ์•Š์€ ์ปดํ“จํ„ฐ๋“ค์ด ์žˆ์œผ๋ฉด, count๋ฅผ ํ•˜๊ณ  ๋‹ค์‹œ ์ƒˆ๋กœ์šด queue๋ฅผ ์ƒ์„ฑํ•ด 1)์„ ๋ฐ˜๋ณตํ•จ

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

3. ์ฝ”๋“œ

import java.util.Queue;
import java.util.LinkedList;
class Bruteforce_2 {
    static boolean[] visited;
    public int solution(int n, int[][] computers) {
        int answer = 0;
        visited = new boolean[n];
        
        for(int i=0; i<n; i++){
            if(visited[i] == false) {
            	bfs(n,computers,i);
            	answer++;
            }
        }
        
        return answer;
    }
    
    public void bfs(int n, int[][] computers, int i){
        Queue<Integer> q = new LinkedList<>();
        q.add(i);
        
        while(!q.isEmpty()){
            int now = q.poll();
            
            for(int idx=0; idx<n; idx++){
                if(computers[now][idx] == 1 && visited[idx] == false){
                    visited[idx] = true;
                    q.add(idx);
                }
            }
        }
        
    }
}

4. ๊ฒฐ๊ณผ

์„ฑ๊ณตโœจ

profile
๐ŸŒฑ์ดˆ๋ณด ๊ฐœ๋ฐœ์ž๐ŸŒฑ

0๊ฐœ์˜ ๋Œ“๊ธ€