[Python] [BOJ] 선수과목(14567)

긍정왕·2021년 7월 5일
1

Algorithm

목록 보기
41/69

💡 문제 해결

  1. 이수할 과목의 in_degree가 꼬이지 않게 하기 위해 선수과목을 기준으로 정렬
  2. 입력받은 값을 차례대로 받으며 이수할 과목과 선수과목의 in_degree+1한 값 중 최대값을 이수 과목 degrees에 저장
  3. 차례대로 degrees를 출력

📌 in_degree의 값을 출력할 때만 사용할 수 있는 방법



🧾 문제 설명

올해 Z대학 컴퓨터공학부에 새로 입학한 민욱이는 학부에 개설된 모든 전공과목을 듣고 졸업하려는 원대한 목표를 세웠다. 
어떤 과목들은 선수과목이 있어 해당되는 모든 과목을 먼저 이수해야만 해당 과목을 이수할 수 있게 되어 있다. 
공학인증을 포기할 수 없는 불쌍한 민욱이는 선수과목 조건을 반드시 지켜야만 한다. 
민욱이는 선수과목 조건을 지킬 경우 각각의 전공과목을 언제 이수할 수 있는지 궁금해졌다. 
계산을 편리하게 하기 위해 아래와 같이 조건을 간소화하여 계산하기로 하였다.

	1. 한 학기에 들을 수 있는 과목 수에는 제한이 없다.
	2. 모든 과목은 매 학기 항상 개설된다.
    
모든 과목에 대해 각 과목을 이수하려면 최소 몇 학기가 걸리는지 계산하는 프로그램을 작성하여라.

문제보기



🖨 입출력



📝 풀이

import sys

input = sys.stdin.readline

N, M = map(int, input().split())
prerequisites = [tuple(map(int, input().split())) for _ in range(M)]

prerequisites.sort()

degrees = [1] * (N + 1)
for prerequisite, subject in prerequisites:
    degrees[subject] = max(degrees[subject], degrees[prerequisite] + 1)

for i in range(1, N + 1):
    print(degrees[i], end=' ')
print()

profile
Impossible + 땀 한방울 == I'm possible

0개의 댓글