๐ ๋ฌธ์
https://www.acmicpc.net/problem/2606
๋ฌธ์
์ ์ข ๋ฐ์ด๋ฌ์ค์ธ ์ ๋ฐ์ด๋ฌ์ค๋ ๋คํธ์ํฌ๋ฅผ ํตํด ์ ํ๋๋ค. ํ ์ปดํจํฐ๊ฐ ์ ๋ฐ์ด๋ฌ์ค์ ๊ฑธ๋ฆฌ๋ฉด ๊ทธ ์ปดํจํฐ์ ๋คํธ์ํฌ ์์์ ์ฐ๊ฒฐ๋์ด ์๋ ๋ชจ๋ ์ปดํจํฐ๋ ์ ๋ฐ์ด๋ฌ์ค์ ๊ฑธ๋ฆฌ๊ฒ ๋๋ค.
์๋ฅผ ๋ค์ด 7๋์ ์ปดํจํฐ๊ฐ <๊ทธ๋ฆผ 1>๊ณผ ๊ฐ์ด ๋คํธ์ํฌ ์์์ ์ฐ๊ฒฐ๋์ด ์๋ค๊ณ ํ์. 1๋ฒ ์ปดํจํฐ๊ฐ ์ ๋ฐ์ด๋ฌ์ค์ ๊ฑธ๋ฆฌ๋ฉด ์ ๋ฐ์ด๋ฌ์ค๋ 2๋ฒ๊ณผ 5๋ฒ ์ปดํจํฐ๋ฅผ ๊ฑฐ์ณ 3๋ฒ๊ณผ 6๋ฒ ์ปดํจํฐ๊น์ง ์ ํ๋์ด 2, 3, 5, 6 ๋ค ๋์ ์ปดํจํฐ๋ ์ ๋ฐ์ด๋ฌ์ค์ ๊ฑธ๋ฆฌ๊ฒ ๋๋ค. ํ์ง๋ง 4๋ฒ๊ณผ 7๋ฒ ์ปดํจํฐ๋ 1๋ฒ ์ปดํจํฐ์ ๋คํธ์ํฌ์์์ ์ฐ๊ฒฐ๋์ด ์์ง ์๊ธฐ ๋๋ฌธ์ ์ํฅ์ ๋ฐ์ง ์๋๋ค.
์ด๋ ๋ 1๋ฒ ์ปดํจํฐ๊ฐ ์ ๋ฐ์ด๋ฌ์ค์ ๊ฑธ๋ ธ๋ค. ์ปดํจํฐ์ ์์ ๋คํธ์ํฌ ์์์ ์๋ก ์ฐ๊ฒฐ๋์ด ์๋ ์ ๋ณด๊ฐ ์ฃผ์ด์ง ๋, 1๋ฒ ์ปดํจํฐ๋ฅผ ํตํด ์ ๋ฐ์ด๋ฌ์ค์ ๊ฑธ๋ฆฌ๊ฒ ๋๋ ์ปดํจํฐ์ ์๋ฅผ ์ถ๋ ฅํ๋ ํ๋ก๊ทธ๋จ์ ์์ฑํ์์ค.
์ ๋ ฅ
์ฒซ์งธ ์ค์๋ ์ปดํจํฐ์ ์๊ฐ ์ฃผ์ด์ง๋ค. ์ปดํจํฐ์ ์๋ 100 ์ดํ์ด๊ณ ๊ฐ ์ปดํจํฐ์๋ 1๋ฒ ๋ถํฐ ์ฐจ๋ก๋๋ก ๋ฒํธ๊ฐ ๋งค๊ฒจ์ง๋ค. ๋์งธ ์ค์๋ ๋คํธ์ํฌ ์์์ ์ง์ ์ฐ๊ฒฐ๋์ด ์๋ ์ปดํจํฐ ์์ ์๊ฐ ์ฃผ์ด์ง๋ค. ์ด์ด์ ๊ทธ ์๋งํผ ํ ์ค์ ํ ์์ฉ ๋คํธ์ํฌ ์์์ ์ง์ ์ฐ๊ฒฐ๋์ด ์๋ ์ปดํจํฐ์ ๋ฒํธ ์์ด ์ฃผ์ด์ง๋ค.
์ถ๋ ฅ
1๋ฒ ์ปดํจํฐ๊ฐ ์ ๋ฐ์ด๋ฌ์ค์ ๊ฑธ๋ ธ์ ๋, 1๋ฒ ์ปดํจํฐ๋ฅผ ํตํด ์ ๋ฐ์ด๋ฌ์ค์ ๊ฑธ๋ฆฌ๊ฒ ๋๋ ์ปดํจํฐ์ ์๋ฅผ ์ฒซ์งธ ์ค์ ์ถ๋ ฅํ๋ค.
โ๏ธ ํ์ด
์ธ์ ๋ฆฌ์คํธ๋ก ํ์ด๋ ๋๋๋ฐ, ์ค๋ฒ3์ด๋ผ ๊ทธ๋ฅ ์ธ์ ํ๋ ฌ๋ก ๊ตฌํํ๋ค.
โป๏ธ ์ธ์ ํ๋ ฌ๋ก ์ฐ๊ฒฐ๋์ด์๋ ๋ ธ๋๋ค์ ํ์ํด์ค๋ค. map[1][2]=true์ด๋ฉด 1๋ฒ ๋ ธ๋์ 2๋ฒ ๋ ธ๋๊ฐ ์ฐ๊ฒฐ๋์ด์๋ค๋ ๋ป์ด๋ค.
โป๏ธ 1๋ฒ ์ปดํจํฐ๋ฅผ ๋ฐฉ๋ฌธ์ฒ๋ฆฌ ํ ํ์ ๋ฃ์ด์ค๋ค.
โป๏ธ 1~N๋ฒ๊น์ง ํ์ธํ๋ฉฐ ๋ฐฉ๋ฌธ์ฒ๋ฆฌ๋ ์ ์๊ณ ํ์ฌ ๋ ธ๋์ ์ฐ๊ฒฐ๋์ด ์๋ ์ปดํจํฐ๋ผ๋ฉด ๊ฐ์๋ฅผ ์นด์ดํ ํ๊ณ ํ์ ๋ฃ์ด์ค๋ค.
โป๏ธ ๋ฐ๋ณตํ๋ค.
๐ป ์์ค์ฝ๋: ์๋ฐ(Java)
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.LinkedList;
import java.util.Queue;
import java.util.StringTokenizer;
//BFS
public class Main_๋ฐฑ์ค_2606_๋ฐ์ด๋ฌ์ค_์ค๋ฒ3 {
public static void main(String[] args) throws IOException{
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
StringTokenizer st = null;
int N = Integer.parseInt(br.readLine()); //์ปดํจํฐ ์
int K = Integer.parseInt(br.readLine()); //์ง์ ์ฐ๊ฒฐ ์์ ์
boolean[][] map = new boolean[N+1][N+1];
for (int i = 0; i < K; i++) {
st = new StringTokenizer(br.readLine());
int c1 = Integer.parseInt(st.nextToken());
int c2 = Integer.parseInt(st.nextToken());
map[c1][c2] = map[c2][c1] = true;
}//input
boolean[] visited = new boolean[N+1];
Queue<Integer> queue = new LinkedList<Integer>();
//์์๋
ธ๋
queue.add(1);
visited[1]=true;
int result = 0;
while(queue.size()>0) {
int cur = queue.poll();
for (int i = 1; i <= N; i++) { //๋ชจ๋ ๋
ธ๋ ํ์
if(!visited[i] && map[cur][i]) {
visited[i] = true;
queue.offer(i);
result++;
}
}
}//bfs
System.out.println(result);
}//end of main
}//end of class
๐ ๐ ๐
๏ผฐ๏ฝ๏ฝ๏ฝ๏ฝ ๏ฝ ๏ผข๏ฝ ๏ผณ๏ผก๏ผน
๐๐ฉ๐ข๐ฏ๐ฌ๐ด ๐ง๐ฐ๐ณ ๐ณ๐ฆ๐ข๐ฅ๐ช๐ฏ๐จ