[BOJ, Python] 2252번_줄 세우기 With 위상 정렬

2026. 8. 2. 01:46·Algorithm/Algorithm

이 글은 Velog에서 이전한 글입니다. Velog 원문 보기

백준_2252번

문제 설명

N명의 학생들을 키 순서대로 줄을 세우려 한다. 학생 A가 학생 B보다 앞에 서야 한다는 M개의 키 비교 정보가 주어질 때, 올바른 줄 세우기 결과를 출력하라.

  • 학생 번호는 1번부터 N번까지.
  • 답이 여러 가지인 경우 아무거나 출력 가능.

알고리즘: 위상 정렬 (Topological Sort)

  • 방향 그래프로 간선을 구성: A → B
  • 진입 차수(in-degree)를 기록하고, 진입 차수가 0인 노드부터 출력
  • 큐(BFS)를 이용해 순차적으로 정렬

논리 흐름

  1. 학생 번호를 정점으로 간주
  2. A → B 형태의 간선 구성
  3. 진입 차수가 0인 노드를 큐에 삽입
  4. 큐에서 꺼내면서 인접한 노드들의 진입 차수를 감소시키고, 0이 되면 다시 큐에 삽입
  5. 모든 정점을 방문할 때까지 반복

정답 코드

import sys
input = lambda: sys.stdin.readline().rstrip()
from collections import deque

N, M = map(int, input().split())
graph = [[] for _ in range(N+1)]
in_degree = [0]*(N+1)
q = deque()

for _ in range(M):
    A, B = map(int, input().split())
    graph[A].append(B)
    in_degree[B] += 1

q = []
for i in range(1, N+1):
    if in_degree[i] == 0:
        q.append(i)

result = []
while q:
    node = q.popleft()
    result.append(node)
    for next_node in graph[node]:
        in_degree[next_node] -= 1
        if in_degree[next_node] == 0:
            q.append(next_node)

print(*result)

시간 복잡도: O(N + M)

  • 그래프 생성: O(M)
  • 위상 정렬: O((N + M) log N)

참고

  • 정답이 여러 개인 위상 정렬 문제에서 채점 시스템이 정해진 순서를 요구할 경우에는 heapq를 사용하여 사전순 정렬이 필요함
  • 단순한 BFS 위상 정렬이라면 deque로도 충분하지만, 위 조건에서 실패할 수 있음

'Algorithm > Algorithm' 카테고리의 다른 글

[프로그래머스] Lv 4. 쿠키 구입  (0) 2026.08.04
[BOJ, Python] 1197번_최소 스패닝 트리  (0) 2026.08.02
[Leetcode, Python] 300. Longest Increasing Subsequence 풀이  (0) 2026.07.31
[BOJ, Python] 백준 NZEC(Non-Zero Exit Code) 오류  (0) 2026.07.31
[BOJ, Python] 1699번_제곱수의 합  (0) 2026.07.31
'Algorithm/Algorithm' 카테고리의 다른 글
  • [프로그래머스] Lv 4. 쿠키 구입
  • [BOJ, Python] 1197번_최소 스패닝 트리
  • [Leetcode, Python] 300. Longest Increasing Subsequence 풀이
  • [BOJ, Python] 백준 NZEC(Non-Zero Exit Code) 오류
pp8817
pp8817
공부한 내용, 개발 관련 지식, 트러블 슈팅 등을 기록합니다. 이전 블로그: https://velog.io/@pp8817/posts
  • pp8817
    끄적이는 개발 log
    pp8817
  • 전체
    오늘
    어제
    • 분류 전체보기 (273)
      • Project (71)
        • 척척학사 (29)
        • Book (23)
        • Saynow (3)
        • YAPP 27기 (4)
        • 나의 작은 프로젝트 (10)
        • Landit (2)
      • Backend (88)
        • Spring (13)
        • Spring MVC (13)
        • Spring Security (4)
        • JPA (26)
        • Database (19)
        • HTTP·Web (13)
        • Architecture (0)
      • Language·CS (59)
        • Java·Kotlin (5)
        • CS Interview (17)
        • Backend Interview (5)
        • Concepts (32)
      • Algorithm (25)
        • Algorithm (24)
        • 소마 알고리즘 스터디 (1)
      • Infra (8)
      • Troubleshooting (11)
      • Retrospective (6)
      • Etc (5)
  • 블로그 메뉴

    • 홈
    • 태그
    • 방명록
  • 링크

  • 공지사항

  • 인기 글

  • 태그

    Project
    척척학사
    Book
    java
    jpa
    Python
    interview
    Spring
    HTTP WEB 기본 지식
    나의 작은 프로젝트
    Spring MVC
    OS
    object
    CS Interview
    Algorithm
    트러블슈팅
    BOJ
    개념 정리!
    http
    게시판
  • 최근 댓글

  • 최근 글

  • hELLO· Designed By정상우.v4.10.6
pp8817
[BOJ, Python] 2252번_줄 세우기 With 위상 정렬
상단으로

티스토리툴바