위상 정렬 (Topology Sort)

2025. 5. 21. 15:24·PS/알고리즘
728x90

위상 정렬은 사이클이 없는 방향 그래프(DAG, Directed Acyclic Graph)에서 노드 순서를 나열하는 알고리즘

즉, 어떤 일을 하기 위해 선행되어야 할 작업들이 있을 때, 그 작업 수행 순서를 결정

📌 사이클이 없는 방향 그래프여야만 위상 정렬 가능!

핵심 이론

위상 정렬은 다음가 같은 단계로 설명할 수 있음

 

  1. 각 노드의 진입 차수(in-degree)를 센다.
  2. 진입 차수가 0인 노드들을 큐에 넣는다.
  3. 큐에서 노드를 하나씩 꺼내어 결과에 넣고, 연결된 노드들의 진입 차수에서 1을 뺀다.
  4. 새롭게 진입 차수가 0이 된 노드를 큐에 넣는다.
  5. 모든 노드를 처리하면 끝.

진입 차수 저장

진입 차수 배열

 

1에서 2, 3을 가리키고 있으므로 D[2], D[3]을 각각 만큼 증가 (나머지 노드 동일)


진입 차수 0인 노드 처리

진입 차수가 0인 노드 1을 택해 위상 정렬 배열에 저장.

연결된 `2`, `3` 노드의 진입 차수 값 -1

👉 모든 노드가 위상 정렬 배열에 들어갈 때까지 반복

📌 진입 차수가 0인 노드가 여러 개인 경우, 무엇을 선택하느냐에 따라 다른 정렬 결과 도출
= 위상 정렬이 늘 같은 정렬 결과를 보장하지 않음!

관련 문제

[백준, 줄 세우기] https://www.acmicpc.net/problem/2252

[백준, 게임 개발] https://www.acmicpc.net/problem/1516

[백준, 임계경로] https://www.acmicpc.net/problem/1948

728x90
'PS/알고리즘' 카테고리의 다른 글
  • 플로이드-워셜 (Floyd-warshall)
  • 다익스트라 (Dijkstra)
  • 유니온 파인드 (Union Find)
  • 암시적 그래프
0woy
0woy
Algorithm, CS, Web 등 배운 내용을 기록합니다.
  • 0woy
    0woy dev
    0woy
  • 전체
    오늘
    어제
  • 🌐 LANGUAGE
    • 분류 전체보기 (80)
      • Backend (21)
        • JAVA (7)
        • DB (11)
        • Spring (1)
        • Spring Security (2)
      • Computer Science (22)
        • 네트워크 (9)
        • 운영체제 (5)
        • 보안 (7)
      • Frontend (15)
        • HTML5 (1)
        • CSS (1)
        • JS (4)
        • Vue 3 (9)
      • PS (16)
        • LeetCode (2)
        • Baekjoon (1)
        • Programmers (1)
        • 알고리즘 (12)
      • Dev Trivia (6)
  • 블로그 메뉴

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

  • 공지사항

  • 인기 글

  • 태그

    PreparedStatement
    JDBC
    속성
    공개키
    Spring
    function
    Graph
    dfs
    Vue3
    set
    트리
    select
    leetcode
    DP
    가용성
    java
    대칭키
    shortestpath
    JS
    BFS
    Props
    javascript
    RDB
    security
    비밀키
    CA
    https
    Filter
    그래프
    tcp
  • 최근 댓글

  • 최근 글

  • 250x250
  • hELLO· Designed By정상우.v4.10.3
0woy
위상 정렬 (Topology Sort)
상단으로

티스토리툴바