๐ 1. ๋ฌธ์ ์ค๋ช
๐ก 2. ์ ๊ทผ๋ฐฉ์
์๋ฃ ๋ง๋ค ์๊ฐ์ ๋ฒ์จ๋ถํฐ ํผ๊ณคํ๋ค. ํํํ
๋ฌธ์ ํ์ด์ ์์, ๋ช
์์ด ๊ทธ๋ํ ๋ฌธ์ ์ธ ๋งํผ ๊ทธ๋ํ์ ๋ํด ๊ฐ๋ตํ ์ค๋ช
ํ๊ณ ์ ํ๋ค.
2-1. ๊ทธ๋ํ์ ๊ตฌ์กฐ
- ๋ ธ๋: ์(circle)์ผ๋ก ํ์ํ๊ณ , ์ซ์๋ก ๋ฒํธ๋ฅผ ์ ๋๋ค.
- ๊ฐ์ : ๋ ธ๋๋ฅผ ์ฐ๊ฒฐํ๋ ์ (segment)์ผ๋ก, ๋ชจ๋ ๊ฐ์ ์ด ์๋ฐฉํฅ์์ ๋ณด์ฌ์ฃผ๊ธฐ ์ํด ํ์ดํ ์์ด ์ง์ ์ผ๋ก ๊ทธ๋ฆฐ๋ค.
return ํ๊ณ ์ ํ๋ ๊ฐ์ 1๋ฒ ๋
ธ๋์์ ๊ฐ์ฅ ๋ฉ๋ฆฌ ๋จ์ด์ง ๋
ธ๋์ ์ ์ด๋ค.
์ฆ 1๋ฒ ๋
ธ๋์์ ๋ค๋ฅธ ๋
ธ๋๋ค๋ก ์ด๋ํ๋ ์ต๋จ ๊ฑฐ๋ฆฌ๋ฅผ ๊ณ์ฐํด์ ์ต๋จ ๊ฑฐ๋ฆฌ๊ฐ ๊ฐ์ฅ ๋จผ ๋
ธ๋๋ค์ด ๋ช ๊ฐ์ธ์ง๋ฅผ ๊ตฌํด์ผ ํ๋ค.
2-2. ํด๊ฒฐ ๋ฐฉ๋ฒ
(1) ์ธ์ ๋ฆฌ์คํธ๋ก ๊ทธ๋ํ ๋ง๋ค๊ธฐ
List<List<Integer>> graph = new ArrayList<>();
์๋ฅผ ๋ค์ด ๋ฌธ์ ์์ ์ ์๋ vertex ๋ฐฐ์ด์ ์ด์ฉํด ์ธ์ ๋ฆฌ์คํธ ํํ๋ก ๊ทธ๋ํ๋ฅผ ๋ง๋ ๋ค.
์) graph[1] = [2, 3] โ 1๋ฒ ๋
ธ๋์ ์ง์ ์ฐ๊ฒฐ๋ ๋
ธ๋๊ฐ 2, 3
์) graph[2] = [1, 3, 4, 5] โ 2๋ฒ ๋
ธ๋์ ์ง์ ์ฐ๊ฒฐ๋ ๋
ธ๋๊ฐ 1, 3, 4, 5
์) graph[3] = [1, 2, 4, 6] โ 3๋ฒ ๋
ธ๋์ ์ง์ ์ฐ๊ฒฐ๋ ๋
ธ๋๊ฐ 1, 2, 4, 6
์ด๊ฑธ ์ ๋ฆฌํด ๋ณด๋ฉด โผ
1๋ฒ โ 2๋ฒ, 3๋ฒ
2๋ฒ โ 1๋ฒ, 3๋ฒ, 4๋ฒ, 5๋ฒ
3๋ฒ โ 1๋ฒ, 2๋ฒ, 4๋ฒ, 6๋ฒ
4๋ฒ โ 2๋ฒ, 3๋ฒ
5๋ฒ โ 2๋ฒ
6๋ฒ โ 3๋ฒ
๊ทธ๋ฆฌ๊ณ ์ด๊ฒ์ ArrayList<>๋ฅผ ์ฌ์ฉํด์ ์ธ์ ๋ฆฌ์คํธ ํํ์ ๋ฐ๋ณต๋ฌธ์ผ๋ก ๋ง๋ค๋ฉด ์๋์ ๊ฐ๋ค.
์๋ฅผ ๋ค์ด, graph.get(1).addAll(Arrays.asList(3, 2));๋ 1๋ฒ ๋
ธ๋์ ์ฐ๊ฒฐ๋ 2๋ฒ, 3๋ฒ ๋
ธ๋๋ฅผ ๊ทธ๋ํ์ ์ถ๊ฐํ๋ ๊ฒ์ด๋ค.
์ด ๋ ์ฒซ๋ฒ์งธ 0๋ฒ ์ธ๋ฑ์ค๋ ์ ์ธํ๋ค.
์๋ํ๋ฉด ๊ทธ๋ํ๊ฐ 1๋ฒ๋ถํฐ ์์ํ๊ธฐ ๋๋ฌธ์ด๋ค.
์๋ฐฉํฅ ์ฐ๊ฒฐ์ด๋ฏ๋ก ์์ชฝ์ ๊ฐ์ ์ถ๊ฐํ๋ค.
// ๊ทธ๋ํ ์ด๊ธฐํ (0๋ฒ ๋
ธ๋๋ ์ฌ์ฉํ์ง ์์)
List<List<Integer>> graph = new ArrayList<>();
for (int i = 0; i <= n; i++) {
graph.add(new ArrayList<>());
}
// ๊ฐ์ ์ ๋ณด ๋ฐ๋ณต๋ฌธ์ผ๋ก ์ถ๊ฐ
for (int[] edge : vertex) {
int a = edge[0];
int b = edge[1];
graph.get(a).add(b); // a๋ฒ ๋
ธ๋์ b๋ฒ ๋
ธ๋ ์ฐ๊ฒฐ
graph.get(b).add(a); // b๋ฒ ๋
ธ๋์ a๋ฒ ๋
ธ๋ ์ฐ๊ฒฐ (์๋ฐฉํฅ)
}
์ฌ๊ธฐ๊น์ง ๊ฐ์ ์ ๋ณด๊ฐ ์ถ๊ฐ๋ ๋ฆฌ์คํธ graph์ ๋ชจ์ต์ด๋ค.
graph[0] = []
graph[1] = [3, 2] // 1๋ฒ ๋
ธ๋๋ 3๋ฒ, 2๋ฒ๊ณผ ์ฐ๊ฒฐ๋จ
graph[2] = [3, 1, 4, 5] // 2๋ฒ ๋
ธ๋๋ 3๋ฒ, 1๋ฒ, 4๋ฒ, 5๋ฒ๊ณผ ์ฐ๊ฒฐ๋จ
graph[3] = [6, 4, 2, 1] // 3๋ฒ ๋
ธ๋๋ 6๋ฒ, 4๋ฒ, 2๋ฒ, 1๋ฒ๊ณผ ์ฐ๊ฒฐ๋จ
graph[4] = [3, 2] // 4๋ฒ ๋
ธ๋๋ 3๋ฒ, 2๋ฒ๊ณผ ์ฐ๊ฒฐ๋จ
graph[5] = [2] // 5๋ฒ ๋
ธ๋๋ 2๋ฒ๊ณผ ์ฐ๊ฒฐ๋จ
graph[6] = [3] // 6๋ฒ ๋
ธ๋๋ 3๋ฒ๊ณผ ์ฐ๊ฒฐ๋จ
(2) BFS๋ก ๊ฑฐ๋ฆฌ ๊ณ์ฐํ๊ธฐ
์ด์ BFS๋ฅผ ํตํด 1๋ฒ ๋
ธ๋์์ ๋ชจ๋ ๋
ธ๋๊น์ง์ ๊ฑฐ๋ฆฌ๋ฅผ ๊ณ์ฐํ๋ค. BFS๋ ํ(Queue)๋ฅผ ์ฌ์ฉํ์ฌ ์งํ๋๋ค.
BFS ๋ก์ง
- ๋จผ์ ์์ ๋ ธ๋(1๋ฒ ๋ ธ๋)๋ฅผ ํ์ ๋ฃ๋๋ค.
- ํ์์ ๋ ธ๋๋ฅผ ํ๋์ฉ ๊บผ๋ด์ ๊ทธ ๋ ธ๋์ ์ฐ๊ฒฐ๋ ๋ชจ๋ ๋ ธ๋๋ฅผ ํ์ํ๋ค.
- ์ฐ๊ฒฐ๋ ๋ ธ๋๊ฐ ์์ง ๋ฐฉ๋ฌธํ์ง ์์ ๋ ธ๋๋ผ๋ฉด ํด๋น ๋ ธ๋๋ฅผ ํ์ ์ถ๊ฐํ๊ณ visited ๋ฐฐ์ด์ true๋ก ํ์ํ์ฌ ๋ค์ ๋ฐฉ๋ฌธํ์ง ์๋๋ก ํ๋ค.
- ๋ ธ๋๊น์ง์ ๊ฑฐ๋ฆฌ๋ฅผ distance ๋ฐฐ์ด์ ๊ธฐ๋กํ๋ค. ์ด๋ ๊ฒํ๋ฉด ๊ฐ ๋ ธ๋๋ ์ฒ์ ๋ฐ๊ฒฌ๋์์ ๋ ์ต๋จ ๊ฑฐ๋ฆฌ๋ก ๊ฐฑ์ ๋๋ค.
- BFS๊ฐ ๋๋ ํ, distance ๋ฐฐ์ด์์ ๊ฐ์ฅ ํฐ ๊ฐ์ ์ฐพ๊ณ ํด๋น ๊ฐ๊ณผ ๊ฐ์ ๊ฑฐ๋ฆฌ๋ฅผ ๊ฐ์ง ๋ ธ๋์ ๊ฐ์๋ฅผ countํด์ return
๐๐ป BFS(๋๋น ์ฐ์ ํ์)์ ์ฐ๋ ์ด์
BFS๋ ์ต๋จ ๊ฑฐ๋ฆฌ๋ฅผ ์ฐพ๋ ๋ฐ ํจ๊ณผ์ ์ด๋ค. BFS(Breadth-First Search)๋ฅผ ์ฌ์ฉํ๋ฉด 1๋ฒ ๋ ธ๋์์ ๋ชจ๋ ๋ ธ๋๊น์ง์ ๊ฑฐ๋ฆฌ๋ฅผ ํ ๋ฒ์ ํ์์ผ๋ก ๊ณ์ฐ๊ฐ๋ฅํ๋ค.
๐ก BFS(๋๋น ์ฐ์ ํ์)
๊ทธ๋ํ๋ฅผ ํ์ํ๋ ๋ฐฉ๋ฒ ์ค ํ๋์ธ๋ฐ, ์ฝ๊ฒ ๋งํ๋ฉด '๋จผ์ ๊ฐ๊น์ด ๋ ธ๋๋ถํฐ ์ฐจ๋ก๋ก ํ์ํ๋ ๋ฐฉ์'์ด๋ค. 1๋ฒ ๋ ธ๋๋ถํฐ ์์ํด์ ์ฃผ๋ณ ๋ ธ๋๋ค์ ์ฐจ๋ก์ฐจ๋ก ํ์ํ๋ค. BFS๋ ํ๋ผ๋ ์๋ฃ๊ตฌ์กฐ๋ฅผ ํตํด์ ๊ตฌํ ํ ์ ์๋ค. ํ๋ ๋จผ์ ์จ ๊ฒ์ด ๋จผ์ ๋์ค๋ ์์๋ก ์๋ํ๋ค. ๊ทธ๋์ ๋จผ์ ๋๊ธฐํ ๋ ธ๋๋ถํฐ ์ฐจ๋ก๋๋ก ํ์์ด ์ฒ๋ฆฌ๋๊ณ ํ์์ ์ ๊ฑฐ๋๋ค.
๊ทธ๋ํ ๊ตฌ์กฐ์์ 1๋ฒ ๋
ธ๋์์๋ถํฐ BFS๋ฅผ ์์ํ๋ฉด ์ด๋ป๊ฒ ๋๋ ์ง ๊ณผ์ ์ ํ๋ ํ๋ ์ค๋ช
ํด ๋ณด๊ฒ ๋ค.
์ ์ธ๋ ํ, ๋ฐฐ์ด โผ
โก queue: ํ์์ ๋
ธ๋๋ฅผ ๊บผ๋ด๋ฉด์ ์ธ์ ํ ๋
ธ๋๋ฅผ ํ์ํ๊ณ ํ์ ์ถ๊ฐํ๋ค.
โก ๋ฐฉ๋ฌธํ ๋
ธ๋(visited): ๋
ธ๋๋ฅผ ์ด๋ฏธ ๋ฐฉ๋ฌธํ๋์ง ์ฌ๋ถ ์ฒดํฌ (์ค๋ณต ๋ฐฉ์ง์ฉ)
โก ๊ฑฐ๋ฆฌ ๋ฐฐ์ด(distance): ๊ฐ ๋
ธ๋์ ์์ ๋
ธ๋(1๋ฒ ๋
ธ๋) ๊ฐ์ ๊ฑฐ๋ฆฌ๋ฅผ ๊ธฐ๋กํ๋ค.
distance์ [0]๋ฒ ์ธ๋ฑ์ค์ ๋ค์ด๊ฐ๋ ๊ฐ์ -1์
๋๋ค.
์ ๊ฐ ์๋ฃ๋ฅผ ๋ง๋๋ ๋ฐ ์ค๋ฅ๊ฐ ์์์ต๋๋ค. ๐๐ป
์ด๊ธฐ๊ฐ์ ์์ง ๋ฏธ๋ฐฉ๋ฌธ์ด๋ฏ๋ก distance๋ ๋ชจ๋ -1๋ก ์ด๊ธฐํ ํด ์ค๋๋ค.
์ด๊ธฐ์ํ
ํ: [1] (1๋ฒ ๋
ธ๋๊ฐ ํ์ ๋ค์ด ์์)
๋ฐฉ๋ฌธํ ๋
ธ๋: [1] (1๋ฒ ๋
ธ๋๋ฅผ ๋ฐฉ๋ฌธ ์ฒ๋ฆฌ)
1๋ฒ ๋
ธ๋ ํ์ ์์:
1๋ฒ ๋
ธ๋๋ฅผ ํ์์ ๊บผ๋ธ๋ค.
1๋ฒ ๋
ธ๋์ ์ฐ๊ฒฐ๋ 2๋ฒ, 3๋ฒ ๋
ธ๋๋ฅผ ํ์ ์ถ๊ฐํ๋ค.
ํ: [2, 3] (2๋ฒ, 3๋ฒ ๋
ธ๋๊ฐ ํ์ ๋ค์ด ์์)
๋ฐฉ๋ฌธํ ๋
ธ๋: [1, 2, 3] (2๋ฒ, 3๋ฒ ๋
ธ๋๋ฅผ ๋ฐฉ๋ฌธ ์ฒ๋ฆฌ)
์ต๋จ๊ฑฐ๋ฆฌ
distance[0]: ๊ทธ๋ํ์์ 0๋ฒ ๋
ธ๋๋ ์กด์ฌํ์ง ์์ผ๋ฏ๋ก -1
distance[1]: 1๋ฒ ๋
ธ๋์์ 1๋ฒ ๋
ธ๋๊น์ง์ ๊ฑฐ๋ฆฌ๋ 0
distance[2]: 1๋ฒ ๋
ธ๋์์ 2๋ฒ ๋
ธ๋๊น์ง์ ์ต๋จ ๊ฑฐ๋ฆฌ๋ 1
distance[3]: 1๋ฒ ๋
ธ๋์์ 3๋ฒ ๋
ธ๋๊น์ง์ ์ต๋จ ๊ฑฐ๋ฆฌ๋ 1
2๋ฒ ๋ ธ๋ ํ์
ํ์์ 2๋ฒ ๋
ธ๋๋ฅผ ๊บผ๋ด์ ํ์ํ๋ค.
2๋ฒ ๋
ธ๋์ ์ฐ๊ฒฐ๋ 1๋ฒ, 3๋ฒ, 4๋ฒ, 5๋ฒ ๋
ธ๋๊ฐ ์์ง๋ง, 1๋ฒ๊ณผ 3๋ฒ์ ์ด๋ฏธ ๋ฐฉ๋ฌธํ ๋
ธ๋๋ผ์ 4๋ฒ๊ณผ 5๋ฒ๋ง ํ์ ๋ฃ๋๋ค.
ํ: [3, 4, 5]
๋ฐฉ๋ฌธํ ๋
ธ๋: [1, 2, 3, 4, 5]
์ต๋จ๊ฑฐ๋ฆฌ
2๋ฒ ๋
ธ๋์์ ์ฐ๊ฒฐ๋ 4๋ฒ, 5๋ฒ ๋
ธ๋๋ 1๋ฒ ๋
ธ๋๋ก๋ถํฐ ๋ ๋ฒ์งธ๋ก ํ์๋๋ ๋
ธ๋๋ค์ด๋ฏ๋ก ๊ฑฐ๋ฆฌ๊ฐ 2๋ก ๊ฐฑ์ ๋๋ค.
distance[4]: 1๋ฒ ๋
ธ๋์์ 2๋ฒ ๋
ธ๋๊น์ง์ ์ต๋จ ๊ฑฐ๋ฆฌ๋ 2
distance[5]: 1๋ฒ ๋
ธ๋์์ 3๋ฒ ๋
ธ๋๊น์ง์ ์ต๋จ ๊ฑฐ๋ฆฌ๋ 2
3๋ฒ ๋
ธ๋ ํ์
ํ์์ 3๋ฒ ๋
ธ๋๋ฅผ ๊บผ๋ด์ ํ์ํ๋ค.
3๋ฒ ๋
ธ๋์ ์ฐ๊ฒฐ๋ 1๋ฒ, 2๋ฒ, 4๋ฒ, 6๋ฒ ๋
ธ๋๊ฐ ์๋๋ฐ, 1๋ฒ, 2๋ฒ, 4๋ฒ์ ์ด๋ฏธ ๋ฐฉ๋ฌธํ ๋
ธ๋๋ผ์ 6๋ฒ๋ง ํ์ ๋ฃ๋๋ค.
ํ: [4, 5, 6]
๋ฐฉ๋ฌธํ ๋
ธ๋: [1, 2, 3, 4, 5, 6]
์ต๋จ๊ฑฐ๋ฆฌ
๊ฒฐ๊ตญ 6๋ฒ ๋
ธ๋๋ 3๋ฒ ๋
ธ๋๋ฅผ ๊ฑฐ์ณ 1๋ฒ ๋
ธ๋๋ก๋ถํฐ ๊ฑฐ๋ฆฌ 2์ ๋๋ฌํ๊ฒ ๋๋ฏ๋ก distance[6] ๊ฐ์ 2์ด๋ค.
distance[6]: 1๋ฒ ๋
ธ๋์์ 2๋ฒ ๋
ธ๋๊น์ง์ ์ต๋จ ๊ฑฐ๋ฆฌ๋ 2
4๋ฒ ๋
ธ๋ ํ์
ํ์์ 4๋ฒ ๋
ธ๋๋ฅผ ๊บผ๋ด์ ํ์ํ๋ค.
4๋ฒ ๋
ธ๋์ ์ฐ๊ฒฐ๋ 2๋ฒ, 3๋ฒ์ ์ด๋ฏธ ๋ฐฉ๋ฌธํ ๋
ธ๋์ด๋ฏ๋ก, ํ์ ์ถ๊ฐํ์ง ์๊ณ ๊ฑฐ๋ฆฌ๋ ๊ฐฑ์ ํ์ง ์๋๋ค.
ํ: [5, 6]
๋ฐฉ๋ฌธํ ๋
ธ๋: [1, 2, 3, 4, 5, 6]
5๋ฒ ๋
ธ๋ ํ์
ํ์์ 5๋ฒ ๋
ธ๋๋ฅผ ๊บผ๋ด์ ํ์ํ๋ค.
5๋ฒ ๋
ธ๋์ ์ฐ๊ฒฐ๋ 2๋ฒ์ ์ด๋ฏธ ๋ฐฉ๋ฌธํ ๋
ธ๋์ด๋ฏ๋ก ํ์ ์ถ๊ฐํ์ง ์๊ณ ๊ฑฐ๋ฆฌ๋ ๊ฐฑ์ ํ์ง ์๋๋ค.
ํ: [6]
๋ฐฉ๋ฌธํ ๋
ธ๋: [1, 2, 3, 4, 5, 6]
6๋ฒ ๋ ธ๋ ํ์
ํ์์ 6๋ฒ ๋
ธ๋๋ฅผ ๊บผ๋ด์ ํ์ํ๋ค.
6๋ฒ ๋
ธ๋์ ์ฐ๊ฒฐ๋ 3๋ฒ์ ์ด๋ฏธ ๋ฐฉ๋ฌธํ ๋
ธ๋์ด๋ฏ๋ก ํ์ ์ถ๊ฐํ์ง ์๊ณ ๊ฑฐ๋ฆฌ๋ ๊ฐฑ์ ํ์ง ์๋๋ค.
ํ: []
๋ฐฉ๋ฌธํ ๋
ธ๋: [1, 2, 3, 4, 5, 6]
ํ์ ์ข
๋ฃ
๋ชจ๋ ๋ ธ๋๋ฅผ ๋ค ํ์ํ ํ, distance ๋ฐฐ์ด์ ๊ธฐ๋ก๋ ๊ฐ ๋ ธ๋๊น์ง์ ๊ฑฐ๋ฆฌ๋ฅผ ๋ฐํ์ผ๋ก 1๋ฒ ๋ ธ๋์์ ๊ฐ์ฅ ๋ฉ๋ฆฌ ๋จ์ด์ง ๋ ธ๋์ ๊ฐ์๋ฅผ ๋ฐํํ ์ ์๋ค. ๊ฐ์ฅ ๋จผ ๊ฑฐ๋ฆฌ๊ฐ 2์ธ ๋ ธ๋๋ค์ด 3๊ฐ์ด๋ฏ๋ก 3์ ๋ฆฌํดํ๋ค.
โญ 3. ์ ๋ต์ฝ๋
import java.util.*;
class Solution {
public int solution(int n, int[][] edge) {
int answer = 0;
// ๊ทธ๋ํ ์ด๊ธฐํ (0๋ฒ ๋
ธ๋๋ ์ฌ์ฉํ์ง ์์)
List<List<Integer>> graph = new ArrayList<>();
for (int i = 0; i <= n; i++) {
graph.add(new ArrayList<>());
}
// ๊ฐ์ ์ ๋ณด ๋ฐ๋ณต๋ฌธ์ผ๋ก ์ถ๊ฐ
for (int[] e : edge) {
int a = e[0];
int b = e[1];
graph.get(a).add(b); // a๋ฒ ๋
ธ๋์ b๋ฒ ๋
ธ๋ ์ฐ๊ฒฐ
graph.get(b).add(a); // b๋ฒ ๋
ธ๋์ a๋ฒ ๋
ธ๋ ์ฐ๊ฒฐ (์๋ฐฉํฅ)
}
// ๊ฑฐ๋ฆฌ ๋ฐฐ์ด๊ณผ ๋ฐฉ๋ฌธ ์ฌ๋ถ ๋ฐฐ์ด ์ด๊ธฐํ
int[] distance = new int[n + 1]; // ๊ฑฐ๋ฆฌ ๋ฐฐ์ด
boolean[] visited = new boolean[n + 1]; // ๋ฐฉ๋ฌธ ์ฌ๋ถ ๋ฐฐ์ด
visited[1] = true; // 1๋ฒ ๋
ธ๋๋ ์์ ๋
ธ๋๋ก ๋ฐฉ๋ฌธ ์ฒ๋ฆฌ
// BFS๋ฅผ ์ํ ํ ์์ฑ (q๋ก ๋ณ์๋ช
๋ณ๊ฒฝ)
Queue<Integer> q = new LinkedList<>();
q.add(1); // ์์ ๋
ธ๋ 1๋ฒ์ ํ์ ์ถ๊ฐ
// BFS ํ์
while (!q.isEmpty()) {
int nowNode = q.poll(); // ํ์ฌ ๋
ธ๋ ๊บผ๋ด๊ธฐ
List<Integer> nodeList = graph.get(nowNode); // ํ์ฌ ๋
ธ๋์ ์ฐ๊ฒฐ๋ ๋
ธ๋๋ค
// ์ฐ๊ฒฐ๋ ๋
ธ๋๋ค ํ์
for (int nextNode : nodeList) {
if (!visited[nextNode]) { // ๋ฐฉ๋ฌธํ์ง ์์ ๋
ธ๋์ผ ๊ฒฝ์ฐ
q.add(nextNode); // ํ์ ์ถ๊ฐ
visited[nextNode] = true; // ๋ฐฉ๋ฌธ ์ฒ๋ฆฌ
distance[nextNode] = distance[nowNode] + 1; // ๊ฑฐ๋ฆฌ ๊ฐฑ์
}
}
}
// ๊ฐ์ฅ ๋จผ ๊ฑฐ๋ฆฌ๊ฐ ์ฐพ๊ธฐ
int maxDistance = Arrays.stream(distance).max().getAsInt();
// ๊ฐ์ฅ ๋จผ ๊ฑฐ๋ฆฌ์ ๋
ธ๋ ๊ฐ์ ์ธ๊ธฐ
for (int dist : distance) {
if (dist == maxDistance) {
answer++;
}
}
return answer;
}
}
๐๐ป ์ข์์ ๊ฐ์ฅ ๋ง์ด ๋ฐ์ ์ฝ๋
import java.util.ArrayList;
class Solution {
public int solution(int n, int[][] edge) {
ArrayList<Integer>[] path = new ArrayList[n];
ArrayList<Integer> bfs = new ArrayList<Integer>();
int answer = 0;
int[] dist = new int[n];
dist[0] = 1;
int max = 0;
for(int i = 0; i < edge.length; i++) {
int num1 = edge[i][0] - 1;
int num2 = edge[i][1] - 1;
if(path[num1] == null)
path[num1] = new ArrayList<Integer>();
if(path[num2] == null)
path[num2] = new ArrayList<Integer>();
path[num1].add(num2);
path[num2].add(num1);
}
bfs.add(0);
while(!bfs.isEmpty()) {
int idx = bfs.get(0);
bfs.remove(0);
while(!path[idx].isEmpty()) {
int num = path[idx].get(0);
path[idx].remove(0);
bfs.add(num);
if(dist[num] == 0) {
dist[num] = dist[idx] + 1;
max = dist[num];
}
}
}
for(int i = 0; i < n; i++) {
if(dist[i] == max)
answer++;
}
return answer;
}
}