Skip to content

Commit dc07413

Browse files
committed
feat: Upload graph-valid-tree (typescript)
1 parent f513c0c commit dc07413

File tree

1 file changed

+45
-0
lines changed

1 file changed

+45
-0
lines changed

โ€Žgraph-valid-tree/mike2ox.ts

+45
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,45 @@
1+
/**
2+
* Source: https://www.lintcode.com/problem/178/
3+
* Solution: ์œ ํšจํ•œ ํŠธ๋ฆฌ์ธ์ง€ ์ˆœํšŒํ•˜๋ฉด์„œ ํ™•์ธํ•˜๋ฉด ๋˜๊ธฐ์— BFS๋กœ ๊ตฌํ˜„
4+
* ์‹œ๊ฐ„ ๋ณต์žก๋„: O(V + E) - ๋…ธ๋“œ์™€ ๊ฐ„์„ ์— ํ•œ๋ฒˆ์€ ๋ฐฉ๋ฌธ
5+
* ๊ณต๊ฐ„ ๋ณต์žก๋„: O(V + E) - ์ธ์ ‘๋ฆฌ์ŠคํŠธ ๋งŒํผ์˜ ๊ณต๊ฐ„ ํ•„์š”
6+
*/
7+
function validTree(n: number, edges: number[][]): boolean {
8+
// ๊ฐ„์„  ๊ฐœ์ˆ˜ ์ฒดํฌ: ํŠธ๋ฆฌ๋Š” ๋…ธ๋“œ ๊ฐœ์ˆ˜ - 1๊ฐœ์˜ ๊ฐ„์„ ์„ ๊ฐ€์ ธ์•ผ ํ•จ
9+
if (edges.length !== n - 1) return false;
10+
11+
// ์ธ์ ‘ ๋ฆฌ์ŠคํŠธ
12+
const adjList: Map<number, number[]> = new Map();
13+
for (let i = 0; i < n; i++) {
14+
adjList.set(i, []);
15+
}
16+
17+
// ์–‘๋ฐฉํ–ฅ ๊ทธ๋ž˜ํ”„ ๊ตฌ์„ฑ
18+
for (const [u, v] of edges) {
19+
adjList.get(u)!.push(v);
20+
adjList.get(v)!.push(u);
21+
}
22+
23+
const queue: [number, number][] = [[0, -1]]; // [๋…ธ๋“œ, ๋ถ€๋ชจ๋…ธ๋“œ]
24+
const visited: Set<number> = new Set([0]);
25+
26+
while (queue.length > 0) {
27+
const [node, parent] = queue.shift()!;
28+
29+
// ๋ชจ๋“  ์ด์›ƒ ๋…ธ๋“œ ํ™•์ธ
30+
for (const neighbor of adjList.get(node)!) {
31+
// ๋ถ€๋ชจ ๋…ธ๋“œ๋Š” continue
32+
if (neighbor === parent) continue;
33+
34+
// ์ด๋ฏธ ๋ฐฉ๋ฌธํ•œ ๋…ธ๋“œ๋ฅผ ๋งŒ๋‚˜๋ฉด ์‚ฌ์ดํด ์กด์žฌ
35+
if (visited.has(neighbor)) return false;
36+
37+
// ์ด์›ƒ ๋…ธ๋“œ๋ฅผ ํ์— ์ถ”๊ฐ€ํ•˜๊ณ  ๋ฐฉ๋ฌธ ํ‘œ์‹œ
38+
visited.add(neighbor);
39+
queue.push([neighbor, node]);
40+
}
41+
}
42+
43+
// ๋ชจ๋“  ๋…ธ๋“œ๊ฐ€ ์—ฐ๊ฒฐ๋˜์–ด ์žˆ๋Š”์ง€ ํ™•์ธ
44+
return visited.size === n;
45+
}

0 commit comments

Comments
ย (0)