๋ฌธ์
ํด๋น ํฌ์คํ ์ ๋ฐฑ์ค์ 2606๋ฒ ๋ฐ์ด๋ฌ์ค ์ ์ ๊ทผ๊ณผ ํด๊ฒฐ ๋ฐฉ๋ฒ์ ์ค๋ช ํ ๊ธ ์ ๋๋ค.
์ ๋ต ์์ค ์ฝ๋๋ฅผ ํ์ธํ์๋ ค๋ฉด solve url ์์ ํ์ธ ๊ฐ๋ฅํฉ๋๋ค.
2606๋ฒ: ๋ฐ์ด๋ฌ์ค
์ฒซ์งธ ์ค์๋ ์ปดํจํฐ์ ์๊ฐ ์ฃผ์ด์ง๋ค. ์ปดํจํฐ์ ์๋ 100 ์ดํ์ด๊ณ ๊ฐ ์ปดํจํฐ์๋ 1๋ฒ ๋ถํฐ ์ฐจ๋ก๋๋ก ๋ฒํธ๊ฐ ๋งค๊ฒจ์ง๋ค. ๋์งธ ์ค์๋ ๋คํธ์ํฌ ์์์ ์ง์ ์ฐ๊ฒฐ๋์ด ์๋ ์ปดํจํฐ ์์ ์๊ฐ ์ฃผ์ด
www.acmicpc.net
์ด ๋ฌธ์ ๋ฅผ ํด๊ฒฐํ๊ธฐ ์ํด ์ด๋ค ๋ฐฉ์์ผ๋ก ์ ๊ทผํด์ผ ํ๋์ง๋ฅผ ๋จผ์ ์๊ฐํด๋ณด์.
๋ฌธ์ ์ ๊ทผ
์ด๋ฒ ๋ฌธ์ ๋ ๋ํ์ ์ธ ๊ทธ๋ํ ํ์ ๋ฌธ์ ๋ผ๊ณ ํ ์ ์๋ค.
๊ทธ ์ค์์ ์ฐ๊ฒฐ ์์ ์ฐพ๊ธฐ์ ๋ฒ์ฃผ์ ํด๋น๋๋๋ฐ, ์ด๋ป๊ฒ ๊ตฌํํ๋์ง ์์๋ณด์.
์ฐ๊ฒฐ ์์๋ฅผ ์ฐพ๋ ๋ํ์ ์ธ ๋ฐฉ๋ฒ์๋ ํฌ๊ฒ 2๊ฐ์ง๊ฐ ์๋ค.
- DFS
- BFS
์ด๋ฒ ๋ฌธ์ ์์๋ DFS๋ณด๋ค๋ BFS๋ก ํด๊ฒฐํ๋ ๊ฒ์ด ๋์ฑ ์ ํฉํ๋ค.
์ด๋ฒ ๋ฌธ์ ์์๋ ํญ์ ์์ ๋ ธ๋๋ 1๋ฒ ๋ ธ๋์ด๊ณ ๋ ์ด์ ๊น๊ฒ ๋ค์ด๊ฐ ํ์ ์์ด, 1๋ฒ ๋ ธ๋์ ์ธ์ ํ ๋ ธ๋๋ง ๊ตฌํ๋ฉด ๋๋ค.
DFS๋ ํ์ฌ ๋
ธ๋์์ ๊ฐ ์ ์๋ ์ต๋ํ์ ๊น๊ฒ ํ์ํ๋ ๊ตฌ์กฐ์ด๋ฏ๋ก dfs๋ณด๋ค ํ์ฌ ๋
ธ๋์ ์ธ์ ํ ๋ชจ๋ ๋
ธ๋๋ฅผ ๋จผ์ ํ์ํ๋ bfs๊ฐ ๋์ฑ ์ ํฉํ ๋ฌธ์ ์๋ค.
ํด๊ฒฐ๋ฒ
์ฐ์ ๊ทธ๋ํ๋ฅผ ๊ตฌํํ๊ธฐ ์ํด์ ์ธ์ ๋ฆฌ์คํธ๋ฅผ ์ฌ์ฉํ์๊ณ , ํ๋ฅผ ์ด์ฉํ bfs ๊ตฌํ์ ํ์๋ค.
์ ๋ต ์ฝ๋
public class Main {
public static void main(String[] args) throws IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(System.out));
int n = Integer.parseInt(br.readLine());
int v = Integer.parseInt(br.readLine());
ArrayList<ArrayList<Integer>> graph = new ArrayList<>();
boolean[] visited = new boolean[n + 1];
for (int i = 0; i <= n; i++) {
graph.add(new ArrayList<>());
}
while(v-- > 0) {
String[] n1n2 = br.readLine().split(" ");
graph.get(Integer.parseInt(n1n2[0])).add(Integer.parseInt(n1n2[1]));
graph.get(Integer.parseInt(n1n2[1])).add(Integer.parseInt(n1n2[0]));
}
int answer = 0;
Queue<Integer> queue = new LinkedList<>();
queue.add(1);
visited[1] = true;
while(!queue.isEmpty()) {
int x = queue.remove();
for(int value : graph.get(x)) {
if(!visited[value]) {
queue.add(value);
visited[value] = true;
answer++;
}
}
}
bw.write(String.valueOf(answer));
bw.flush();
bw.close();
}
}
๋๊ธ