PS/๋ฐฑ์ค
[๋ฐฑ์ค] 11724 : ์ฐ๊ฒฐ ์์์ ๊ฐ์ - java [์๋ฐ]
mokhs
2022. 2. 28. 17:24
https://www.acmicpc.net/problem/11724
11724๋ฒ: ์ฐ๊ฒฐ ์์์ ๊ฐ์
์ฒซ์งธ ์ค์ ์ ์ ์ ๊ฐ์ N๊ณผ ๊ฐ์ ์ ๊ฐ์ M์ด ์ฃผ์ด์ง๋ค. (1 โค N โค 1,000, 0 โค M โค Nร(N-1)/2) ๋์งธ ์ค๋ถํฐ M๊ฐ์ ์ค์ ๊ฐ์ ์ ์ ๋์ u์ v๊ฐ ์ฃผ์ด์ง๋ค. (1 โค u, v โค N, u โ v) ๊ฐ์ ๊ฐ์ ์ ํ ๋ฒ๋ง ์ฃผ
www.acmicpc.net
์ดํด
๋ฌธ์ ํ์ด์ ์์ ๋ฌธ์ ๋ฅผ ์ดํดํด๋ณด์.
- ์ฐ๊ฒฐ ์์(Connected Component)๋ ์ฐ๊ฒฐ๋ ์ ์ ์ ์งํฉ์ ์๋ฏธํ๋ค. ๋ค์ ์ด๋ฏธ์ง์์์ ์ฐ๊ฒฐ ์์๋ 4๊ฐ์ด๋ค.
- ๋ฐ๋ผ์ ํด๋น ๋ฌธ์ ๋ ๊ทธ๋ํ ํ์์ ํตํด ์ฐ๊ฒฐ๋ ์ ์ ์ ๋ชจ๋ ๋ฐฉ๋ฌธ์ฒ๋ฆฌํ๊ณ
- ๋ฐฉ๋ฌธ์ฒ๋ฆฌ ๋์ง ์์ ์ ์ ์ด ๋ฐ๊ฒฌ๋๋ฉด ์๋ก์ด ์ฐ๊ฒฐ ์์์์ ์๋ฏธํ๋ค.

ํ์ด
- ์ ์ฒด ๋ ธ๋(1~N)๋ฅผ ์ํํ๋ฉฐ ํด๋น ๋ ธ๋๊ฐ ๋ฐฉ๋ฌธ๋์ง ์์๋ค๋ฉด, ์ฐ๊ฒฐ ์์(result)๋ฅผ ์นด์ดํธํ๋ค.
- ํด๋น ๋ ธ๋๋ฅผ ์์์ผ๋ก ๊ทธ๋ํ ํ์(BFS or DFS)์ ์งํํ๋ฉฐ ๋ฐฉ๋ฌธ์ฒ๋ฆฌํ๋ค.(์ด ๊ธ์์ BFS๋ฅผ ๊ตฌํํ๋ค)
- ์ฃผ์* ์ฐ๊ฒฐ๋ ๋ ธ๋๋ฅผ ๋ฐ๊ฒฌ๊ณผ ๋์์ ๋ฐฉ๋ฌธ์ฒ๋ฆฌํ์ง ์์ผ๋ฉด ๋ฌดํ๋ฃจํ์ ๋น ์ง ์ ์์ผ๋ ์ฃผ์ํ์.
์ฝ๋
package BOJ;
import java.io.*;
import java.util.ArrayList;
import java.util.LinkedList;
import java.util.List;
import java.util.Queue;
public class ์ฐ๊ฒฐ_์์์_๊ฐ์_11724 {
static BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
static BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(System.out));
public static void main(String[] args) throws IOException {
String[] input = br.readLine().split(" ");
final int N = Integer.parseInt(input[0]);
final int M = Integer.parseInt(input[1]);
boolean[] visited = new boolean[N + 1];
int result = 0;
List<List<Integer>> graph = new ArrayList<>();
for (int i = 0; i <= N; i++) {
graph.add(new ArrayList<>());
}
for (int i = 0; i < M; i++) {
String[] connectInfo = br.readLine().split(" ");
int u = Integer.parseInt(connectInfo[0]);
int v = Integer.parseInt(connectInfo[1]);
graph.get(u).add(v);
graph.get(v).add(u);
}
for (int i = 1; i <= N; i++) {
if (visited[i]) {
continue;
}
result += 1;
Queue<Integer> queue = new LinkedList<>();
queue.add(i);
while (!queue.isEmpty()) {
Integer current = queue.poll();
visited[current] = true;
for (Integer node : graph.get(current)) {
if (!visited[node]) {
visited[node] = true;
queue.add(node);
}
}
}
}
bw.write(Integer.toString(result));
bw.close();
br.close();
}
}