https://www.acmicpc.net/problem/2606
2606๋ฒ: ๋ฐ์ด๋ฌ์ค
์ฒซ์งธ ์ค์๋ ์ปดํจํฐ์ ์๊ฐ ์ฃผ์ด์ง๋ค. ์ปดํจํฐ์ ์๋ 100 ์ดํ์ด๊ณ ๊ฐ ์ปดํจํฐ์๋ 1๋ฒ ๋ถํฐ ์ฐจ๋ก๋๋ก ๋ฒํธ๊ฐ ๋งค๊ฒจ์ง๋ค. ๋์งธ ์ค์๋ ๋คํธ์ํฌ ์์์ ์ง์ ์ฐ๊ฒฐ๋์ด ์๋ ์ปดํจํฐ ์์ ์๊ฐ ์ฃผ์ด
www.acmicpc.net
1. ๋ฌธ์ ์์ฝ
1๋ฒ์ด ๋ฐ์ด๋ฌ์ค์ ๊ฑธ๋ฆฌ๋ฉด, 1๋ฒ๊ณผ ์ฐ๊ฒฐ๋ ๋ชจ๋ ๋ฒํธ๊ฐ ๊ฐ์ผ๋๋ค. 4๋ฒ๊ณผ 7๋ฒ์ 1๋ฒ๊ณผ ์ฐ๊ฒฐ๋์ด ์์ง ์์ผ๋ฏ๋ก ๊ฐ์ผ๋์ง ์๋๋ค.
์ฐ๊ฒฐ ์ ๋ณด๊ฐ ์ฃผ์ด์ก์ ๋, 1๋ฒ์ ์์์ผ๋ก ๋ฐ์ด๋ฌ์ค์ ๊ฐ์ผ๋๋ ์ปดํจํฐ์ ์๋ฅผ ์ถ๋ ฅํ๋ผ.
2. ํ์ด
๊ทธ๋ํ ๋ฌธ์ ์ด๋ค. ํด๋น ๋ ธ๋์ ์ธ์ ํ ๋ ธ๋๋ค์ ๋ฐ๋ผ ์ฐ๊ฒฐ๋ ๋ชจ๋ ๋ ธ๋๋ค์ ๊ฐ์๋ฅผ ์ถ๋ ฅํ๋ฉด ๋๋ค.
๊ฐ ์ ์๋ ๋ชจ๋ ๋ ธ๋๋ฅผ ๊ฐ๊ธฐ ๋๋ฌธ์ DFS, BFS ๋ชจ๋ ๊ฐ๋ฅํ๋ค. ํ์ง๋ง ์ธ์ ํ ๋ ธ๋๋ฅผ ๋ฐฉ๋ฌธํ๊ธฐ๋ง ํ๋ฉด ๋๊ธฐ ๋๋ฌธ์
์ธ์ ๋ ธ๋ ๋ฐฉ๋ฌธ์ ํจ์จ์ ์ธ BFS๋ฅผ ์ฌ์ฉํ์๋ค. ์ ํ์ ์ธ BFS ํ์ ์ฌ์ฉํ์๋ค.
๊ทธ๋ํ๋ฅผ ๊ตฌํํ๋ ๋ฐฉ๋ฒ์ ์ธ์ ํ๋ ฌ, ์ธ์ ๋ฆฌ์คํธ๊ฐ ์๋ค. ๋๋ ์ธ์ ๋ฆฌ์คํธ๋ก ํ์ด๋ณด์๋ค.
3. ๋ฌธ์ ์
์ฌ๋ฌ ๋ฐฉ๋ฒ์ผ๋ก ํ์ด๋ณผ ๊ฒ
1. DFS
2. ์ธ์ ํ๋ ฌ
4. ์ฝ๋
BFS, ์ธ์ ๋ฆฌ์คํธ
import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.util.ArrayDeque;
import java.util.ArrayList;
import java.util.List;
import java.util.Queue;
import java.util.StringTokenizer;
public class BOJ_2606_๋ฐ์ด๋ฌ์ค {
static boolean[] visited;
static List<List<Integer>> list = new ArrayList<> ();
static int N, ans;
static int cnt;
public static void main(String[] args) throws Exception{
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
N = Integer.parseInt(br.readLine());
cnt = Integer.parseInt(br.readLine());
visited = new boolean[N+1];
for (int i = 0; i <= N; i++) {
list.add(new ArrayList<>());
}
for (int i = 0; i < cnt; i++) {
StringTokenizer st = new StringTokenizer(br.readLine());
int num1 = Integer.parseInt(st.nextToken());
int num2 = Integer.parseInt(st.nextToken());
list.get(num1).add(num2); //์๋ฐฉํฅ ๊ทธ๋ํ
list.get(num2).add(num1);
}
bfs(1);
System.out.println(ans);
}
static void bfs(int start) {
Queue<Integer> queue = new ArrayDeque<>();
queue.add(start);
visited[start] = true;
while (!queue.isEmpty()) {
int front = queue.poll();
int len = list.get(front).size();
for (int i = 0; i < len; i++) {
int next = list.get(front).get(i);
if (visited[next]) continue;
queue.add(next);
ans++; //์ธ์ ๋
ธ๋ ๊ฐ์ ์นด์ดํธ
visited[next] = true;
}
}
}
}
'Algorithm > BOJ' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[BOJ] 15686 ์นํจ๋ฐฐ๋ฌ [Java] (0) | 2022.08.29 |
---|---|
[BOJ] 16637 ๊ดํธ์ถ๊ฐํ๊ธฐ [Java] (0) | 2022.08.28 |
[BOJ] 1697 ์จ๋ฐ๊ผญ์ง [Java] (0) | 2022.08.25 |
[BOJ] 1759 ์ํธ ๋ง๋ค๊ธฐ [Java] (0) | 2022.08.24 |
[BOJ] 10026 ์ ๋ก์์ฝ [Java] (0) | 2022.08.24 |