본문 바로가기
개발 노트/알고리즘 문제

백준 2252 줄세우기 (골드 3)

by LeeInGyu 2025. 6. 18.

백준 2252 줄세우기 (골드 3)

링크: 2252 줄세우기


접근 방법

  • (도움) 위상 정렬로 그래프가 순환되지 않을 때, 사용 가능
  • 현재 문제는 줄세우기로 순환될 수 없어 위상 정렬로 구현 가능

소스 코드

소스 코드: 위상 정렬 알고리즘

import sys
input = sys.stdin.readline

# 입력
N, M = map(int, input().split())
graph = [[] for _ in range(N)]
in_graph = [0] * N
for m in range(M):
    A, B = map(int, input().split())
    graph[A-1].append((B-1, 1))
    in_graph[B-1] += 1

# 앞에 있는 수가 없을 때
queue = []
for idx, val in enumerate(in_graph):
    if val == 0:
        queue.append(idx)
        in_graph[idx] = -1

output = []
while queue:
    idx = queue.pop()
    output.append(idx+1)

    for i, val in graph[idx]:
        in_graph[i] -= 1

        if in_graph[i] == 0:
            queue.append(i)
            in_graph[i] = -1

print(*output, sep=" ")

코드 개선 사항(GPT 4o)

  • 없음

결론

  • 위상 정렬에 대해서는 처음 다뤄봐서 힌트를 보면서 했다.
  • 코드 구현 자체는 쉬웠고, 최적화할 때 인접 리스트 활용을 놓치지 않아야할 것 같다.

'개발 노트 > 알고리즘 문제' 카테고리의 다른 글

백준 13549 숨바꼭질 3 (골드 5)  (0) 2025.06.24
백준 1806 부분합 (골드 4)  (0) 2025.06.19
백준 3190 뱀 (골드 4)  (0) 2025.06.17
백준 10610 30 (실버 4)  (1) 2025.06.16
백준 11404 플로이드 (골드 4)  (0) 2025.05.29