๋ฌธ์ (์ถ์ฒ: https://www.acmicpc.net/problem/11403)
<๊ฒฝ๋ก ์ฐพ๊ธฐ>
๋ฌธ์ 
๊ฐ์ค์น ์๋ ๋ฐฉํฅ ๊ทธ๋ํ G๊ฐ ์ฃผ์ด์ก์ ๋, ๋ชจ๋ ์ ์  (i, j)์ ๋ํด์, i์์ j๋ก ๊ฐ๋ ๊ฒฝ๋ก๊ฐ ์๋์ง ์๋์ง ๊ตฌํ๋ ํ๋ก๊ทธ๋จ์ ์์ฑํ์์ค.
์ ๋ ฅ
์ฒซ์งธ ์ค์ ์ ์ ์ ๊ฐ์ N (1 ≤ N ≤ 100)์ด ์ฃผ์ด์ง๋ค. ๋์งธ ์ค๋ถํฐ N๊ฐ ์ค์๋ ๊ทธ๋ํ์ ์ธ์  ํ๋ ฌ์ด ์ฃผ์ด์ง๋ค. i๋ฒ์งธ ์ค์ j๋ฒ์งธ ์ซ์๊ฐ 1์ธ ๊ฒฝ์ฐ์๋ i์์ j๋ก ๊ฐ๋ ๊ฐ์ ์ด ์กด์ฌํ๋ค๋ ๋ป์ด๊ณ , 0์ธ ๊ฒฝ์ฐ๋ ์๋ค๋ ๋ป์ด๋ค. i๋ฒ์งธ ์ค์ i๋ฒ์งธ ์ซ์๋ ํญ์ 0์ด๋ค.
์ถ๋ ฅ
์ด N๊ฐ์ ์ค์ ๊ฑธ์ณ์ ๋ฌธ์ ์ ์ ๋ต์ ์ธ์  ํ๋ ฌ ํ์์ผ๋ก ์ถ๋ ฅํ๋ค. ์ ์  i์์ j๋ก ๊ฐ๋ ๊ฒฝ๋ก๊ฐ ์์ผ๋ฉด i๋ฒ์งธ ์ค์ j๋ฒ์งธ ์ซ์๋ฅผ 1๋ก, ์์ผ๋ฉด 0์ผ๋ก ์ถ๋ ฅํด์ผ ํ๋ค.
๋ฌธ์  ํ์ด
- my solution (Python)
import sys
from collections import deque
def bfs(graph, visited, start):
    queue=deque([start])
    result=[] # ๊ฒฝ๋ก
    while queue:
        temp=queue.popleft()
        for i in graph[temp]:
            if visited[i]==0:
                queue.append(i)
                visited[i]=1
                result.append(i)
    return result
if __name__=='__main__':
    n=int(input()) # ์ ์ ์ ๊ฐ์
    graph={}
    for i in range(n):
        graph[i]=[]
    for i in range(n): # ์ธ์  ํ๋ ฌ : i -> j ๊ฒฝ๋ก ํ์
        s=list(map(int, sys.stdin.readline().split()))
        for j in range(n):
            if s[j]==1:
                graph[i].append(j)
    answer=[[0]*n for i in range(n)]
    for i in range(n):
        visited = [0] * n # ๋ฐฉ๋ฌธ ์ฌ๋ถ
        result=bfs(graph, visited, i)
        for j in result: # i -> j ๊ฒฝ๋ก ์กด์ฌ
            answer[i][j]=1
    for i in answer:
        print(' '.join(map(str,i)))
- my solution (JAVA)
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.LinkedList;
import java.util.Queue;
public class _11403_๊ฒฝ๋ก์ฐพ๊ธฐ {
	static ArrayList<Integer> bfs(HashMap graph, int visited[], int start) {
		Queue<Integer> queue=new LinkedList<>();
		ArrayList<Integer> result=new ArrayList<>(); // ๊ฒฝ๋ก
		
		queue.add(start);
		
		while(queue.size()!=0) {
			int temp=queue.poll();
			ArrayList<Integer> x=(ArrayList<Integer>) graph.get(temp);
			for(int i=0; i<x.size(); i++) {
				if(visited[x.get(i)] == 0) {
					queue.add(x.get(i));
					visited[x.get(i)]=1;
					result.add(x.get(i));
				}
			}
		}
		return result;
	}
	public static void main(String[] args) throws IOException {
		BufferedReader bf=new BufferedReader(new InputStreamReader(System.in));
		
		int n=Integer.parseInt(bf.readLine()); // ์ ์ ์ ๊ฐ์
		HashMap<Integer, ArrayList<Integer>> graph=new HashMap<>();
		
		
		for(int i=0; i<n; i++) {
			graph.put(i, new ArrayList<>());
		}
		
		int temp[]=new int[n];
		for(int i=0; i<n; i++) { // ์ธ์  ํ๋ ฌ : i -> j ๊ฒฝ๋ก ํ์
			String s=bf.readLine();
			for(int j=0; j<n; j++) {
				temp[j]=Integer.parseInt(s.split(" ")[j]);
			}
			for(int j=0; j<n; j++) {
				if(temp[j]==1) {
					ArrayList<Integer> x=graph.get(i);
					x.add(j);
					graph.put(i,x);
				}
			}
		}
		int answer[][]=new int[n][n];
		
		for(int i=0; i<n; i++) {
			int visited[]=new int[n]; // ๋ฐฉ๋ฌธ ์ฌ๋ถ
			ArrayList<Integer> result=bfs(graph,visited,i);
			for(int j=0; j<result.size(); j++) { // i -> j ๊ฒฝ๋ก ์กด์ฌ
				answer[i][result.get(j)]=1;
			}
		}
		for(int i=0; i<n; i++) {
			for(int j=0; j<n; j++) {
				System.out.print(answer[i][j]+" ");
			}
			System.out.println();
		}
	}
}
์ฃผ์ด์ง ์ธ์  ํ๋ ฌ์ ๋ฐ๋ผ i -> j๋ก ์ฐ๊ฒฐ๋ ๊ฒฝ๋ก๋ฅผ dict, HashMap์ผ๋ก ์ ๋ฆฌ ํ ๊ฐ ์ ์ ์์ bfs๋ฅผ ํตํ์ฌ ๊ฐ์ ์ ์ฌ๋ถ๋ฅผ ์์๋ธ๋ค.
- bfs ( graph, ๋ฐฉ๋ฌธ ์ฌ๋ถ, ์์ ์์น)
 : result = ์์ ์์น์์ ๊ฐ ์ ์๋ ์ ์ 
 : queue๊ฐ ๋น ๋๊น์ง ๋ฐ๋ณต -> ์ ์ผ ์ฒ์ ๊ฐ์ pop -> pop ํ ๊ฐ์์ ์ฐ๊ฒฐ๋ ์ ์ ์ ์ํ -> ์์ง ๋ฐฉ๋ฌธํ์ง ์์์ผ๋ฉด qeuue์ ์ถ๊ฐ ๋ฐ ๋ฐฉ๋ฌธ check, result์ ์ถ๊ฐ
 : result ๋ฐํ
- main
 : n = ์ ์ ์ ๊ฐ์
 : graph = ๊ฐ์ ์ฐ๊ฒฐ
 : ์ฃผ์ด์ง ์ธ์  ํ๋ ฌ์ ์ ๋ ฅ๋ฐ์ i -> j ๊ฒฝ๋ก ํ์
 : answer = ์ ๋ต ( ์ธ์  ํ๋ ฌ ํ์ )
 : ๊ฐ ์ ์ ์์ ํจ์ ํธ์ถ ํ ๋ฐํํ ๊ฐ์ ํ์ฉํ์ฌ ๊ฒฝ๋ก ์กด์ฌํ๋ ๊ณณ 1๋ก ์ ์ฅ
 : answer ( ์ธ์  ํ๋ ฌ ) ์ถ๋ ฅ
์๊ฐ๐ค
ํ ๋ฒ๋ง์ ํต๊ณผํ๋ ๊ฑด ๋๋ฌด ๊ธฐ๋ถ ์ข์ ์ผ!!!
ํฌ๊ฒ ์ด๋ ต์ง ์์๋ ๋ฌธ์ ์๋ค.

'๐Algorithm > ๐ฅBaekjoon' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
| [Baekjoon] 16928_๋ฑ๊ณผ ์ฌ๋ค๋ฆฌ ๊ฒ์ (0) | 2022.04.12 | 
|---|---|
| [Baekjoon] 5014_์คํํธ๋งํฌ (0) | 2022.04.08 | 
| [Baekjoon] 2583_์์ญ ๊ตฌํ๊ธฐ (0) | 2022.04.06 | 
| [Baekjoon] 1697_์จ๋ฐ๊ผญ์ง (0) | 2022.04.05 | 
| [Baekjoon] 7562_๋์ดํธ์ ์ด๋ (0) | 2022.04.04 |