|
| 1 | +/** |
| 2 | + * @param {number} numCourses |
| 3 | + * @param {number[][]} prerequisites |
| 4 | + * @return {boolean} |
| 5 | + */ |
| 6 | +var canFinish = function (numCourses, prerequisites) { |
| 7 | + if (numCourses === 1) return true; // ๊ณผ๋ชฉ์ด 1๊ฐ๋ฉด ๋ฌด์กฐ๊ฑด ์๊ฐ ๊ฐ๋ฅ |
| 8 | + |
| 9 | + let adjList = new Map(); // ๊ฐ ๊ณผ๋ชฉ์ ๋ํด ์ ํ ๊ณผ๋ชฉ๋ค์ ์ ์ฅํ๋ ์ธ์ ๋ฆฌ์คํธ |
| 10 | + let visited = new Set(); // ์ด๋ฏธ ์๊ฐ ๊ฐ๋ฅํ ๊ฒ์ผ๋ก ํ์ธ๋ ๊ณผ๋ชฉ๋ค |
| 11 | + let path = new Set(); // ํ์ฌ DFS ๊ฒฝ๋ก์ ํฌํจ๋ ๊ณผ๋ชฉ๋ค (์ฌ์ดํด ํ์ธ์ฉ) |
| 12 | + |
| 13 | + // ๋ชจ๋ ๊ณผ๋ชฉ์ ์ธ์ ๋ฆฌ์คํธ์ ์ด๊ธฐํ |
| 14 | + for (let i = 0; i < numCourses; i++) { |
| 15 | + adjList.set(i, []); |
| 16 | + } |
| 17 | + |
| 18 | + // prerequisite ์ ๋ณด๋ฅผ ๊ธฐ๋ฐ์ผ๋ก ์ธ์ ๋ฆฌ์คํธ ๊ตฌ์ฑ |
| 19 | + for (let i = 0; i < prerequisites.length; i++) { |
| 20 | + // [0, 1]์ 0์ ๋ฃ๊ธฐ ์ํด 1์ ๋จผ์ ๋ค์ด์ผ ํจ |
| 21 | + adjList.get(prerequisites[i][0]).push(prerequisites[i][1]); |
| 22 | + } |
| 23 | + |
| 24 | + // DFS ํจ์: ํด๋น course๋ฅผ ์๊ฐํ ์ ์๋์ง ํ์ธ |
| 25 | + const canTake = (course) => { |
| 26 | + if (visited.has(course)) return true; // ์ด๋ฏธ ํ์ธ๋ ์ฝ์ค๋ ์ฌํ์ธ ํ์ ์์ |
| 27 | + if (path.has(course)) return false; // ํ์ฌ DFS ๊ฒฝ๋ก์ course๊ฐ ์๋ค๋ฉด ์ฌ์ดํด ๋ฐ์ |
| 28 | + |
| 29 | + path.add(course); // ํ์ฌ ๊ฒฝ๋ก์ course ์ถ๊ฐ |
| 30 | + |
| 31 | + let preCourses = adjList.get(course); // course๋ฅผ ๋ฃ๊ธฐ ์ํ ์ ํ ๊ณผ๋ชฉ๋ค |
| 32 | + for (let i = 0; i < preCourses.length; i++) { |
| 33 | + if (!canTake(preCourses[i])) return false; // ์ ํ ๊ณผ๋ชฉ ์ค ํ๋๋ผ๋ ๋ถ๊ฐ๋ฅํ๋ฉด ์ข
๋ฃ |
| 34 | + } |
| 35 | + |
| 36 | + path.delete(course); // ๊ฒฝ๋ก์์ ์ ๊ฑฐ (๋ฐฑํธ๋ํน) |
| 37 | + visited.add(course); // ์๊ฐ ๊ฐ๋ฅํ ๊ฒ์ผ๋ก ํ์ธ |
| 38 | + return true; |
| 39 | + }; |
| 40 | + |
| 41 | + // ๋ชจ๋ ๊ณผ๋ชฉ์ ๋ํด ์๊ฐ ๊ฐ๋ฅํ์ง ํ์ธ |
| 42 | + for (let i = 0; i < numCourses; i++) { |
| 43 | + path = new Set(); // ์๋ก์ด DFS ํ์์ด๋ฏ๋ก ๊ฒฝ๋ก ์ด๊ธฐํ |
| 44 | + if (!canTake(i)) return false; // ํ ๊ณผ๋ชฉ์ด๋ผ๋ ๋ชป ๋ค์ผ๋ฉด false |
| 45 | + } |
| 46 | + |
| 47 | + return true; // ๋ชจ๋ ๊ณผ๋ชฉ ์๊ฐ ๊ฐ๋ฅ |
| 48 | +}; |
0 commit comments