๋ฌธ์ (์ถ์ฒ: 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 |