Skip to content

Commit fa0b9b0

Browse files
committed
Course Schedule Solution
1 parent e48930e commit fa0b9b0

File tree

1 file changed

+45
-0
lines changed

1 file changed

+45
-0
lines changed

โ€Žcourse-schedule/clara-shin.js

Lines changed: 45 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,45 @@
1+
/**
2+
* @param {number} numCourses
3+
* @param {number[][]} prerequisites
4+
* @return {boolean}
5+
*/
6+
var canFinish = function (numCourses, prerequisites) {
7+
// 1. ์ธ์ ‘ ๋ฆฌ์ŠคํŠธ์™€ ์ง„์ž… ์ฐจ์ˆ˜ ๋ฐฐ์—ด ์ดˆ๊ธฐํ™”
8+
const graph = new Array(numCourses).fill(null).map(() => []);
9+
const inDegree = new Array(numCourses).fill(0);
10+
11+
// 2. ๊ทธ๋ž˜ํ”„ ๊ตฌ์„ฑ ๋ฐ ์ง„์ž… ์ฐจ์ˆ˜ ๊ณ„์‚ฐ
12+
for (const [course, prereq] of prerequisites) {
13+
graph[prereq].push(course);
14+
inDegree[course]++; // course์˜ ์ง„์ž… ์ฐจ์ˆ˜ ์ฆ๊ฐ€
15+
}
16+
17+
// 3. ์ง„์ž… ์ฐจ์ˆ˜๊ฐ€ 0์ธ ๋…ธ๋“œ๋“ค์„ ํ์— ์ถ”๊ฐ€
18+
const queue = [];
19+
for (let i = 0; i < numCourses; i++) {
20+
if (inDegree[i] === 0) {
21+
queue.push(i);
22+
}
23+
}
24+
25+
// 4. ์œ„์ƒ ์ •๋ ฌ ์ˆ˜ํ–‰
26+
let processedCourses = 0;
27+
28+
while (queue.length > 0) {
29+
const current = queue.shift();
30+
processedCourses++;
31+
32+
// ํ˜„์žฌ ๋…ธ๋“œ์™€ ์—ฐ๊ฒฐ๋œ ๋ชจ๋“  ๋…ธ๋“œ์˜ ์ง„์ž… ์ฐจ์ˆ˜ ๊ฐ์†Œ
33+
for (const neighbor of graph[current]) {
34+
inDegree[neighbor]--;
35+
36+
// ์ง„์ž… ์ฐจ์ˆ˜๊ฐ€ 0์ด ๋˜๋ฉด ํ์— ์ถ”๊ฐ€
37+
if (inDegree[neighbor] === 0) {
38+
queue.push(neighbor);
39+
}
40+
}
41+
}
42+
43+
// 5. ๋ชจ๋“  ๊ฐ•์˜๋ฅผ ์ฒ˜๋ฆฌํ–ˆ๋Š”์ง€ ํ™•์ธ
44+
return processedCourses === numCourses;
45+
};

0 commit comments

Comments
ย (0)