๋ฌธ์
๋ฌธ์ ๋งํฌ https://www.acmicpc.net/problem/11724
- ๋ฐฉํฅ ์๋ ๊ทธ๋ํ๊ฐ ์ฃผ์ด์ก์ ๋, ์ฐ๊ฒฐ ์์ (Connected Component)์ ๊ฐ์๋ฅผ ๊ตฌํ๋ ํ๋ก๊ทธ๋จ์ ์์ฑํ์์ค.
- ์ฒซ์งธ ์ค์ ์ ์ ์ ๊ฐ์ N๊ณผ ๊ฐ์ ์ ๊ฐ์ M์ด ์ฃผ์ด์ง๋ค. (1 ≤ N ≤ 1,000, 0 ≤ M ≤ N×(N-1)/2)
- ๋์งธ ์ค๋ถํฐ M๊ฐ์ ์ค์ ๊ฐ์ ์ ์ ๋์ u์ v๊ฐ ์ฃผ์ด์ง๋ค. (1 ≤ u, v ≤ N, u ≠ v) ๊ฐ์ ๊ฐ์ ์ ํ ๋ฒ๋ง ์ฃผ์ด์ง๋ค.
- ์ฒซ์งธ ์ค์ ์ฐ๊ฒฐ ์์์ ๊ฐ์๋ฅผ ์ถ๋ ฅํ๋ค.
์์ด๋์ด
- ๋ ธ๋๋ฅผ ์ ๋ ฅ๋ฐ์๋๋ง๋ค ArrayList๋ก ์๋ก ๋ ธ๋๋ฅผ ์ฐ๊ฒฐํ๋ค.
- for๋ฌธ์ ์ฌ์ฉํ์ฌ 1๋ถํฐ N๊น์ง์ ๋ ธ๋๋ฅผ ๋๋ฉด์ ๋ฐฉ๋ฌธํ์ง ์์ ๋ ธ๋๋ฉด ํด๋น ๋ ธ๋๋ก BFS๋ฅผ ๋๋ฆฐ๋ค.
- ๊ทธ๋ฆฌ๊ณ BFS๋ฅผ ์ด์ฉํ์ฌ ์ ๋ ฅ๋ค์ด์จ ๋ ธ๋๋ฅผ ๊ธฐ์ค์ผ๋ก ์ฐ๊ฒฐ๋ ๋ ธ๋๋ฅผ ๋ฐฉ๋ฌธํ์ฌ ๋ฐฉ๋ฌธ์ฒ๋ฆฌ๋ฅผ ํ๋ค.
- ๊ทธ๋์ BFS๋ฅผ ๋๋ฆด๋๋ง๋ค ์นด์ดํธ๋ฅผ ํ๋์ฉ ๋ ํด์ค๋ค.
๊ฒช์ ์ํ์ฐฉ์ค
- X
์ฝ๋
import java.io.*;
import java.util.*;
public class BOJ11724 {
static int N;
static int M;
static boolean visited[];
static ArrayList<Integer> graph[];
public static void main(String[] args) throws Exception{
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
StringTokenizer st = new StringTokenizer(br.readLine());
// ์ ์ ์ ๊ฐ์
N = Integer.parseInt(st.nextToken());
// ๊ฐ์ ์ ๊ฐ์
M = Integer.parseInt(st.nextToken());
// ๋
ธ๋์ ๋ฐฉ๋ฌธ์ฌ๋ถ
visited = new boolean[N + 1];
// ์ฐ๊ฒฐ๋ ์ ์ ์ ์ ์ฅํ ArrayList
graph = new ArrayList[N + 1];
for(int i = 0; i <= N; i++){
graph[i] = new ArrayList<>();
}
for(int i = 0; i < M; i++){
StringTokenizer st2 = new StringTokenizer(br.readLine());
// ๊ธฐ์ค ๋
ธ๋
int a = Integer.parseInt(st2.nextToken());
// ์ฐ๊ฒฐ ๋
ธ๋
int b = Integer.parseInt(st2.nextToken());
// ์๋ก ๋
ธ๋์ ์ฐ๊ฒฐ
graph[a].add(b);
graph[b].add(a);
}
// ์ฐ๊ฒฐ ๊ฐ์๋ฅผ ์
๋ณ์
int cnt = 0;
// ๋
ธ๋ ๋ฒํธ๋๋ก ๋๋ค๊ฐ
for(int i = 1; i <= N; i++){
// ๋ฐฉ๋ฌธํ์ง ์์ ๋
ธ๋๊ฐ ์๋ค๋ฉด
if(!visited[i]){
// BFS๋ฅผ ๋๋ฆฌ๊ณ
BFS(i);
// ์ฐ๊ฒฐ ๊ฐ์ + 1
cnt = cnt + 1;
}
}
System.out.println(cnt);
}
public static void BFS(int n){
// ๋
ธ๋๋ฅผ ์ ์ฅํ Queue
LinkedList<Integer> q = new LinkedList<>();
// Queue์ ์
๋ ฅ๋ฐ์ ๊ฐ์ ๋ฃ์
q.offer(n);
// ํด๋น ๋
ธ๋ ๋ฐฉ๋ฌธ ์ฒ๋ฆฌ
visited[n] = true;
while(!q.isEmpty()){
// ๋งจ ์์ ๋ ๊ฐ์ ๋ฐ๋ก ์ ์ฅ
int node = q.peek();
q.poll();
// ๋
ธ๋๋ ์ฐ๊ฒฐ๋ ๋
ธ๋ ์๋งํผ ๋ฐ๋ณต
for(int i : graph[node]){
// ํด๋น ๋
ธ๋๋ฅผ ๋ฐฉ๋ฌธํ์ง ์์๋ค๋ฉด
if(!visited[i]){
// Queue์ ํด๋น ๋
ธ๋๋ฅผ ์ถ๊ฐํ๊ณ
q.add(i);
// ๋ฐฉ๋ฌธ ์ฒ๋ฆฌ
visited[i] = true;
}
}
}
}
}
'์๊ณ ๋ฆฌ์ฆ' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[Java] BOJ 18870 ์ขํ ์์ถ (2) | 2024.08.15 |
---|---|
[Java] BOJ 18111 ๋ง์ธํฌ๋ํํธ (0) | 2024.08.14 |
[Java] BOJ 2805 ๋๋ฌด ์๋ฅด๊ธฐ (2) | 2024.08.12 |
[Java] BOJ 11279 ์ต๋ ํ (0) | 2024.08.11 |
[Java] BOJ 2630 ์์ข ์ด ๋ง๋ค๊ธฐ (0) | 2024.08.05 |