[알고리즘] 위상정렬(Topology Sort)

2024. 10. 11. 15:26·공부/알고리즘

참고 자료

  • GeeksForGeeks : https://www.geeksforgeeks.org/topological-sorting/?ref=header_outind
  • youngeui_hong.log : https://velog.io/@youngeui_hong/%EC%95%8C%EA%B3%A0%EB%A6%AC%EC%A6%98-%EC%9C%84%EC%83%81%EC%A0%95%EB%A0%AC-%EB%AC%B8%EC%A0%9C-%EC%B4%9D-%EC%A0%95%EB%A6%AC
  • Claude AI ( 문법 확인용 )

🖐️[알고리즘] 위상정렬(Topology Sort)

위상정렬은 순환성이 없는 방향 그래프(DAG)에서 사용 가능한 알고리즘이며, 결과 값으로 그래프의 노드들을 선형적으로 나타낸다. 이때 결과 값은 항상 일정하지 않다.

 

위 이미지에서 위상정렬을 통해서 결과 값을 나타내면 다음과 같은 값이 나올 수 있다.

5 -> 4 -> 2 -> 3 -> 1 -> 0
4 -> 5 -> 2 -> 3 -> 1 -> 0

 

많은 사람들이 예시로 대학교 과목을 수강하기 전, 선행이 필요한 과목, 외출할 때 준비 순서, 등을 이야기 하는데 나는 크게 와닿지가 않아서 문제 풀이를 기반으로 위상정렬 알고리즘을 이해하고 넘어갔다. 위상정렬 학습에 필요한 정보를 보자.

 


☑️ 진입차수(Indegree), 진출차수(OutDegree)

  •  진입차수(Indegree)
    • 어떤 노드 A로 들어오는 간선의 개수
  • 진출차수(Outdegree)
    • 어떤 노드 A에서 나가는 간선의 개수

 

이해하기 어려운 개념은 아니고 어떤 노드 A가 있을 때, 진입하는 간선과 진출하는 간선의 수를 말하는 것이 된다. 노드마다 진입차수, 진출차수는 다르다.

https://velog.io/@youngeui_hong/%EC%95%8C%EA%B3%A0%EB%A6%AC%EC%A6%98-%EC%9C%84%EC%83%81%EC%A0%95%EB%A0%AC-%EB%AC%B8%EC%A0%9C-%EC%B4%9D-%EC%A0%95%EB%A6%AC

 


☑️ 위상정렬 구현 방법

위상정렬을 풀어내는 방법은 Queue와 Stack이 있다. 이 중에서 Queue를 사용하는 방법을 보자.

1. 진입차수가 0인 노드를 Queue에 삽입한다.
2. Queue에서 노드를 꺼내고 해당 노드와 이어진 노드의 간선을 제거한다.
3. 진입차수가 0인 노드가 있는지 검색하고 있을 경우, Queue에 삽입한다.
4. Queue가 빌 때 까지 2번부터 3번을 반복한다.

 


☑️ 문제

이제 사용 방법에 대해서 알기 위해서 위상정렬 문제를 풀면서 생각해보자.

 

[Python, 2252번] 줄 세우기

☑️ [Python, 백준/2252번] 줄 세우기1️⃣ 문제2️⃣ 접근위상정렬.. Topology Sort... 이 개념을 공부하고 있다가 이해가 가지 않았다. 위상정렬이 DAG에서 선형적으로 보일 수 있게끔 정렬하는 알고리

taeyeokim.tistory.com

 

'공부 > 알고리즘' 카테고리의 다른 글

[알고리즘] C++로 이해하는 검색 알고리즘(선형 검색, 이진 검색, 해시법 등)  (0) 2025.04.06
[알고리즘] C++로 이해하는 DFS와 BFS  (0) 2025.04.03
[알고리즘] LCS(Longest Common Subsequence)  (0) 2024.10.07
[알고리즘] 백트래킹(Backtracking)  (1) 2024.09.14
[알고리즘] 재귀란 무엇인가?  (2) 2024.09.14
'공부/알고리즘' 카테고리의 다른 글
  • [알고리즘] C++로 이해하는 검색 알고리즘(선형 검색, 이진 검색, 해시법 등)
  • [알고리즘] C++로 이해하는 DFS와 BFS
  • [알고리즘] LCS(Longest Common Subsequence)
  • [알고리즘] 백트래킹(Backtracking)
태역
태역
  • 태역
    RYULAB
    태역
  • 전체
    오늘
    어제
    • 분류 전체보기 N
      • 언어
        • C
        • C++
        • C#
      • 엔진, 프레임워크
        • Unity
        • Unreal
        • Electron
      • 공부 N
        • 디자인 패턴
        • 수학
        • CS
        • Git
        • 알고리즘 N
        • 자료구조
      • 코테
        • 프로그래머스
        • 백준
      • 독서
        • Effective C#
        • CLR via C#
        • 뇌를 자극하는 윈도우즈 시스템 프로그래밍
        • 오브젝트
        • CSAPP
        • OSTEP
      • 프로젝트
        • Unity
      • 개발 일지
        • 퓨처리티
        • 골든타임
      • 활동
        • 게임잼 후기
        • 게임제작동아리 브릿지
        • 크래프톤 정글
        • 기타
      • 기타
  • 블로그 메뉴

    • 링크

    • 공지사항

      • 2024 04 17
    • 인기 글

    • 태그

      인프런 #인프런강의후기 #게임개발 #게임개발강의 #인강후기 #강의후기 #게임개발자 #인프런강의
      오블완
      티스토리챌린지
    • 최근 댓글

    • 최근 글

    • hELLO· Designed By정상우.v4.10.3
    태역
    [알고리즘] 위상정렬(Topology Sort)
    상단으로

    티스토리툴바