다라다라V
article thumbnail
728x90
반응형

문제요약 (2252. 줄 세우기)

키 순서가 주어질 때 키를 비교한 순서를 출력하라.

 

 

2252번: 줄 세우기

첫째 줄에 N(1 ≤ N ≤ 32,000), M(1 ≤ M ≤ 100,000)이 주어진다. M은 키를 비교한 회수이다. 다음 M개의 줄에는 키를 비교한 두 학생의 번호 A, B가 주어진다. 이는 학생 A가 학생 B의 앞에 서야 한다는 의

www.acmicpc.net

 

풀이를 위한 부연 설명

  • 같은 순서가 나올 때 관계가 없이 출력된다는 점에서 위상 정렬이 사용된다.
    • 반드시 순환관계가 없는지 확인해야한다.
  • 위상정렬에 대한 개념과 연관 문제는 다음 게시글을 참고하면 된다.
 

[코테 알고리즘] 그래프 이론 / 관련 문제

본 글은 "나동빈"님의 [이것이 코딩 테스트다]를 참고하여 작성하였으며, 필자가 직접 문제를 풀며 관련된 문제들을 찾아 정리하였습니다. 시리즈 보기 [코테 알고리즘] 파이썬 기본 / 관련 문제

daradarav.tistory.com

 

코드 

import sys
input = sys.stdin.readline
from collections import deque

n, m = map(int, input().split())

student = [[] for _ in range(n+1)]
inDegree = [0] * (n+1)

for _ in range(m):
    a, b = map(int, input().split())
    student[a].append(b)
    inDegree[b] += 1

que = deque()

for i in range(1, n+1):
    if inDegree[i] == 0:
        que.append(i)

while que:
    now = que.popleft()
    print(now, end=" ")
    for new in student[now]:
        inDegree[new] -= 1
        if inDegree[new] == 0:
            que.append(new)

 

 

 

반응형
profile

다라다라V

@DaraDaraV

포스팅이 좋았다면 "좋아요❤️" 또는 "구독👍🏻" 해주세요!