|
| 1 | +// ์ ๋ฒ์ฃผ course-schedule ๋ฌธ์ ์ ์ ์ฌํ ์ฌ์ดํด์ด ์กด์ฌํ์ง ์์์ผํ๋ ํธ๋ฆฌ๋ฅผ ์ฐพ๋ ๋ฌธ์ |
| 2 | +// ์ฐจ์ด๊ฐ ์๋ค๋ฉด course-schedule๋ ๋ฐฉํฅ ๊ทธ๋ํ์ง๋ง ์ด ๋ฌธ์ ๋ ๋ฌด๋ฐฉํฅ ๊ทธ๋ํ๋ผ๋ ์ฐจ์ด๊ฐ ์์ |
| 3 | +// ๋ฌด๋ฐฉํฅ ๊ทธ๋ํ๋ ์ด์ ๋
ธ๋(๋ถ๋ชจ)๋ฅผ ํตํด ๋ค์ ๋์์จ ํ ์ฐ๊ฒฐ์ ํ๋จํด์ผํ๋ ๊ฒฝ์ฐ๊ฐ ์์ด๊ฑฐ ๊ตฌํ์ด ์กฐ๊ธ ๋ ์ด๋ ค์ |
| 4 | +public class GraphValidTree { |
| 5 | + public boolean validTree(int n, int[][] edges) { |
| 6 | + if (edges.length != n - 1) return false; // ํธ๋ฆฌ๋ ๋ฐ๋์ (n-1)๊ฐ์ ๊ฐ์ ํ์ |
| 7 | + |
| 8 | + // ๊ทธ๋ํ ์ธ์ ๋ฆฌ์คํธ ์์ฑ |
| 9 | + Map<Integer, List<Integer>> graph = new HashMap<>(); |
| 10 | + for (int i = 0; i < n; i++) { |
| 11 | + graph.put(i, new ArrayList<>()); |
| 12 | + } |
| 13 | + for (int[] edge : edges) { |
| 14 | + graph.get(edge[0]).add(edge[1]); |
| 15 | + graph.get(edge[1]).add(edge[0]); |
| 16 | + } |
| 17 | + |
| 18 | + Set<Integer> visited = new HashSet<>(); |
| 19 | + if (!dfs(graph, 0, -1, visited)) return false; |
| 20 | + |
| 21 | + return visited.size() == n; |
| 22 | + } |
| 23 | + |
| 24 | + private boolean dfs(Map<Integer, List<Integer>> graph, int node, int parent, Set<Integer> visited) { |
| 25 | + if (visited.contains(node)) return false; // ์ฌ์ดํด ๋ฐ๊ฒฌ |
| 26 | + |
| 27 | + visited.add(node); |
| 28 | + for (int neighbor : graph.get(node)) { |
| 29 | + if (neighbor == parent) continue; |
| 30 | + if (!dfs(graph, neighbor, node, visited)) return false; |
| 31 | + } |
| 32 | + return true; |
| 33 | + } |
| 34 | +} |
0 commit comments