From 906cbe2f09a6a44339e1299ca0cd4fe392371e88 Mon Sep 17 00:00:00 2001 From: lkhyun <102892446+lkhyun@users.noreply.github.com> Date: Mon, 29 Sep 2025 21:49:17 +0900 Subject: [PATCH] =?UTF-8?q?[20250929]=20BOJ=20/=20G4=20/=20=EC=97=AC?= =?UTF-8?q?=ED=96=89=EA=B0=80=EC=9E=90=20/=20=EC=9D=B4=EA=B0=95=ED=98=84?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- ...54\355\226\211\352\260\200\354\236\220.md" | 62 +++++++++++++++++++ 1 file changed, 62 insertions(+) create mode 100644 "lkhyun/202509/29 BOJ G4 \354\227\254\355\226\211\352\260\200\354\236\220.md" diff --git "a/lkhyun/202509/29 BOJ G4 \354\227\254\355\226\211\352\260\200\354\236\220.md" "b/lkhyun/202509/29 BOJ G4 \354\227\254\355\226\211\352\260\200\354\236\220.md" new file mode 100644 index 00000000..a6c2bf99 --- /dev/null +++ "b/lkhyun/202509/29 BOJ G4 \354\227\254\355\226\211\352\260\200\354\236\220.md" @@ -0,0 +1,62 @@ +```java +import java.util.*; +import java.io.*; + +public class Main{ + static BufferedReader br = new BufferedReader(new InputStreamReader(System.in)); + static BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(System.out)); + static StringTokenizer st; + static StringBuilder sb = new StringBuilder(); + static int N,M; + static int[][] cities; + static int[] travel; + static Set connected = new HashSet<>(); + + public static void main(String[] args) throws Exception { + N = Integer.parseInt(br.readLine()); + M = Integer.parseInt(br.readLine()); + cities = new int[N+1][N+1]; + travel = new int[M]; + + for (int i = 1; i <= N; i++) { + st = new StringTokenizer(br.readLine()); + for (int j = 1; j <= N; j++) { + cities[i][j] = Integer.parseInt(st.nextToken()); + } + } + + st = new StringTokenizer(br.readLine()); + for (int i = 0; i < M; i++) { + travel[i] = Integer.parseInt(st.nextToken()); + } + + BFS(travel[0]); + for (int i = 0; i < M; i++) { + if(!connected.contains(travel[i])){ + bw.write("NO"); + bw.close(); + return; + } + } + bw.write("YES"); + bw.close(); + } + public static void BFS(int start){ + ArrayDeque q = new ArrayDeque<>(); + boolean[] visited = new boolean[N+1]; + q.offer(start); + visited[start] = true; + + while(!q.isEmpty()){ + int cur = q.poll(); + connected.add(cur); + + for (int i=1;i<=N;i++) { + if(cities[cur][i] == 0 || visited[i]) continue; + q.offer(i); + visited[i] = true; + } + } + } +} +```