BOJ [선수과목]

jj·2022년 5월 30일
0

알고리즘-문제

목록 보기
29/35

문제 보기


한 번에 듣는 과목수에 제한이 없을 때 모든 과목을 듣는데 몇학기가 걸리는지 구하시오.





풀이


defaultdict(set)을 사용하여 각 dict에 선수과목을 set형태로 적어넣고 deque로 현재 들을 수 있는 강의를 설정한 다음 while문을 돌면서 deque에서 강의를 하나씩 빼서 들으면서 dict에 접근하여 해당 강의가 선수과목이면 제거하고 제거됐을 떄 set길이가 0이면 deque에 넣는 식으로 해결했다.





코드


from collections import deque, defaultdict

n,m = map(int,input().split())
graph = defaultdict(set)
can_take = deque([])

for _ in range(m):
	a,b = map(int,input().split())
	graph[b].add(a)

for i in range(1,n+1):
	if len(graph[i]) == 0:
		can_take.append((i,0))

answer = [[] for _ in range(n+1)]

while can_take:
	cla, day = can_take.popleft()
	answer[cla].append(day+1)
	for i in range(1,n+1):
		if cla in graph[i]:
			graph[i].remove(cla)
			if len(graph[i]) == 0:
				can_take.append((i,day+1))

for i in range(1,n+1):
	print(answer[i][0])
profile
끊임없이 공부하는 개발자

0개의 댓글

관련 채용 정보