Skip to content

Commit eb5ee0b

Browse files
committed
leetcode.com 207. Course Schedule
문제 링크: https://leetcode.com/problems/course-schedule
1 parent c7239d0 commit eb5ee0b

2 files changed

Lines changed: 50 additions & 0 deletions

File tree

Lines changed: 42 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,42 @@
1+
from typing import List
2+
from collections import deque
3+
4+
class Solution:
5+
def canFinish(self, numCourses: int, prerequisites: List[List[int]]) -> bool:
6+
class Vertex:
7+
def __init__(self, v):
8+
self.v = v
9+
self.incoming = []
10+
self.outgoing = []
11+
12+
vertexes = {}
13+
14+
for fr, to in prerequisites:
15+
if fr not in vertexes.keys():
16+
vertexes[fr] = Vertex(fr)
17+
18+
if to not in vertexes.keys():
19+
vertexes[to] = Vertex(to)
20+
21+
vertexes[fr].outgoing.append(to)
22+
vertexes[to].incoming.append(fr)
23+
24+
queue = deque()
25+
26+
for vertex in list(vertexes.values()):
27+
if len(vertex.incoming) == 0:
28+
queue.append(vertex)
29+
30+
while queue:
31+
vertex = queue.popleft()
32+
fr = vertex.v
33+
34+
for to in vertex.outgoing:
35+
vertexes[to].incoming.remove(fr)
36+
37+
if len(vertexes[to].incoming) == 0:
38+
queue.append(vertexes[to])
39+
40+
del vertexes[fr]
41+
42+
return len(vertexes.values()) == 0
Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,8 @@
1+
from unittest import TestCase
2+
from main import Solution
3+
4+
5+
class TestSolution(TestCase):
6+
def test1_can_finish(self):
7+
sln = Solution()
8+
self.assertEqual(True, sln.canFinish(numCourses = 2, prerequisites = [[1,0]]))

0 commit comments

Comments
 (0)