Skip to content

Commit 4a39f62

Browse files
committed
add: solve DaleStudy#262 Graph Valid Tree with ts
1 parent 30f2c0e commit 4a39f62

File tree

1 file changed

+69
-0
lines changed

1 file changed

+69
-0
lines changed

โ€Žgraph-valid-tree/Yjason-K.ts

Lines changed: 69 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,69 @@
1+
/**
2+
*
3+
* In graph theory, a tree is an undirected graph
4+
* in which any two vertices are connected by exactly one path,
5+
* or equivalently a connected acyclic undirected graph.
6+
*
7+
*
8+
* ๊ทธ๋ž˜ํ”„๊ฐ€ valid tree์ธ์ง€ ํ™•์ธํ•˜๋Š” ํ•จ์ˆ˜
9+
* @param {number} n - ๋…ธ๋“œ์˜ ์ˆ˜
10+
* @param {number[][]} edges - ๊ฐ„์„ ์˜ ์ •๋ณด
11+
* @returns {boolean} - ์ฃผ์–ด์ง„ ๊ฐ„์„  ์ •๋ณด๋กœ ๋งŒ๋“ค์–ด์ง„ ๊ทธ๋ž˜ํ”„๊ฐ€ ํŠธ๋ฆฌ์ธ์ง€ ์—ฌ๋ถ€
12+
*
13+
* ์‹œ๊ฐ„ ๋ณต์žก๋„: O(n)
14+
* - ๋ชจ๋“  ๋…ธ๋“œ๋ฅผ ํ•œ ๋ฒˆ์”ฉ ๋ฐฉ๋ฌธํ•˜์—ฌ ๊ทธ๋ž˜ํ”„๊ฐ€ ํŠธ๋ฆฌ์ธ์ง€ ํ™•์ธ
15+
*
16+
* ๊ณต๊ฐ„ ๋ณต์žก๋„: O(n)
17+
* - ์ธ์ ‘ ๋ฆฌ์ŠคํŠธ๋กœ ๊ทธ๋ž˜ํ”„, ๋ฐฉ๋ฌธ๋ฐฐ์—ด
18+
*/
19+
function validTree(n: number, edges: number[][]): boolean {
20+
// ๋…ธ๋“œ์™€ ๊ฐ„์„ ์˜ ์ˆ˜ ๋น„๊ต
21+
if (edges.length !== n-1) {
22+
return false
23+
}
24+
25+
// ์ธ์ ‘ ๋ฆฌ์ŠคํŠธ ํ˜•ํƒœ๋กœ ๊ทธ๋ž˜ํ”„ ์ƒ์„ฑ
26+
const grapph: Map<number, number[]> = new Map()
27+
for (let i = 0; i < n; i++) {
28+
grapph.set(i, []);
29+
};
30+
for (const [a, b] of edges) {
31+
grapph.get(a)?.push(b)
32+
grapph.get(a)?.push(b)
33+
};
34+
35+
// ๋ฐฉ๋ฌธ ๋ฐฐ์—ด ์ƒ์„ฑ
36+
const visited: boolean[] = new Array(n).fill(false);
37+
38+
// DFS ๊นŠ์ด ์šฐ์„  ํƒ์ƒ‰
39+
const dfs = (node:number, parent: number): boolean => {
40+
visited[node] = true;
41+
for (const neighbor of grapph.get(node)!) {
42+
if (!visited[neighbor]) {
43+
if (!dfs(neighbor, node)) {
44+
return false;
45+
}
46+
} else if (neighbor !== parent) {
47+
// ์ด๋ฏธ ๋ฐฉ๋ฌธํ•œ ๋…ธ๋“œ๊ฐ€ ๋ถ€๋ชจ๊ฐ€ ์•„๋‹ˆ๋ฉด ์‚ฌ์ดํด ๋ฐœ์ƒ
48+
return false;
49+
}
50+
}
51+
return true;
52+
}
53+
54+
// DFS๋ฅผ 0๋ฒˆ ๋…ธ๋“œ๋ถ€ํ„ฐ ์‹œ์ž‘
55+
// ์‹œ์ž‘ ์ง€์ ์€ -1๋กœ ์„ค์ •
56+
if(!dfs(0, -1)) {
57+
return false;
58+
};
59+
60+
// ๋ชจ๋“  ๋…ธ๋“œ๊ฐ€ ๋ฐฉ๋ฌธ๋˜์—ˆ๋Š”์ง€ ํ™•์ธ
61+
for (const isVisited of visited) {
62+
if (!isVisited) {
63+
return false;
64+
}
65+
}
66+
67+
return true;
68+
}
69+

0 commit comments

Comments
ย (0)