๋ฌธ์
ํด๋น ํฌ์คํ ์ ๋ฐฑ์ค์ 2606๋ฒ ๋ฐ์ด๋ฌ์ค ์ ์ ๊ทผ๊ณผ ํด๊ฒฐ ๋ฐฉ๋ฒ์ ์ค๋ช ํ ๊ธ ์ ๋๋ค.
์ ๋ต ์์ค ์ฝ๋๋ฅผ ํ์ธํ์๋ ค๋ฉด solve url ์์ ํ์ธ ๊ฐ๋ฅํฉ๋๋ค.
์ด ๋ฌธ์ ๋ฅผ ํด๊ฒฐํ๊ธฐ ์ํด ์ด๋ค ๋ฐฉ์์ผ๋ก ์ ๊ทผํด์ผ ํ๋์ง๋ฅผ ๋จผ์ ์๊ฐํด๋ณด์.
๋ฌธ์ ์ ๊ทผ
์ด๋ฒ ๋ฌธ์ ๋ ๋ํ์ ์ธ ๊ทธ๋ํ ํ์ ๋ฌธ์ ๋ผ๊ณ ํ ์ ์๋ค.
๊ทธ ์ค์์ ์ฐ๊ฒฐ ์์ ์ฐพ๊ธฐ์ ๋ฒ์ฃผ์ ํด๋น๋๋๋ฐ, ์ด๋ป๊ฒ ๊ตฌํํ๋์ง ์์๋ณด์.
์ฐ๊ฒฐ ์์๋ฅผ ์ฐพ๋ ๋ํ์ ์ธ ๋ฐฉ๋ฒ์๋ ํฌ๊ฒ 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();
}
}
๋๊ธ