<--- 리트코드 207. Course Schedule --->
# 문제: 0을 완료하기 위해서는 1을 끝내야 한다는 것을 [0,1] 쌍으로 표현하는 n개의 코스가 있다. 코스 개수 n과 이 쌍들을 입력으로 받았을 때 모든 코스가 완료 가능한지 판별하라.
입력
2, [[1,0]] |
출력
true |
입력
2, [[1,0],[0,1]] |
출력
false |
# 풀이
1. DFS로 순환 구조 판별
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
|
import collections
def can_finish(num_courses, prerequisites):
graph = collections.defaultdict(list)
for x, y in prerequisites:
graph[x].append(y)
traced = set()
def dfs(i):
if i in traced:
return False
traced.add(i)
for y in graph[i]:
if not dfs(y):
return False
traced.remove(i)
return True
for x in list(graph):
if not dfs(x):
return False
return True
num_courses = 2
prerequisites = [[1,0]]
print(can_finish(num_courses, prerequisites))
|
cs |
2. 가지치기를 이용한 최적화
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
|
import collections
def can_finish(num_courses, prerequisites):
graph = collections.defaultdict(list)
for x, y in prerequisites:
graph[x].append(y)
traced = set()
visited = set()
def dfs(i):
if i in traced:
return False
if i in visited:
return True
traced.add(i)
for y in graph[i]:
if not dfs(y):
return False
traced.remove(i)
visited.add(i)
return True
for x in list(graph):
if not dfs(x):
return False
return True
num_courses = 2
prerequisites = [[1,0]]
print(can_finish(num_courses, prerequisites))
|
cs |
'Python' 카테고리의 다른 글
파이썬 알고리즘 인터뷰 - 38. 일정 재구성 (0) | 2022.01.30 |
---|---|
파이썬 알고리즘 인터뷰 - 37. 부분 집합 (0) | 2022.01.30 |
파이썬 알고리즘 인터뷰 - 36. 조합의 합 (0) | 2022.01.30 |
파이썬 알고리즘 인터뷰 - 35. 조합 (0) | 2022.01.30 |
파이썬 알고리즘 인터뷰 - 34. 순열 (0) | 2022.01.30 |