위상 정렬 계산기
선행 관계를 넣으면 진입차수를 세어 위상 정렬 순서를 내고, 사이클이 있으면 어느 정점이 얽혔는지 짚어 줍니다. 나눠 맡겨도 줄일 수 없는 최소 단계와 가능한 순서의 가짓수도 함께 나옵니다.
선행 관계 (한 줄에 «먼저 뒤»)
«자료구조 알고리즘»은 자료구조를 끝내야 알고리즘을 할 수 있다는 뜻입니다. 화살표(->)나 쉼표로 써도 되고, 한 줄에 셋 이상 적으면 사슬로 읽습니다.
위상 정렬 순서
이산수학 → 프로그래밍 → 자료구조 → 알고리즘 → 캡스톤
정점 5개 · 간선 5개
| 단계 | 한꺼번에 할 수 있는 것 |
|---|---|
| 1 | 이산수학, 프로그래밍 |
| 2 | 자료구조 |
| 3 | 알고리즘 |
| 4 | 캡스톤 |
| 정점 | 진입차수 | 가장 이른 단계 |
|---|---|---|
| 알고리즘 | 2 | 3 |
| 이산수학 | 0 | 1 |
| 자료구조 | 2 | 2 |
| 캡스톤 | 1 | 4 |
| 프로그래밍 | 0 | 1 |
사용 방법
- 1한 줄에 «먼저 뒤» 순서로 선행 관계를 적습니다. 화살표나 쉼표로 써도 됩니다.
- 2위상 정렬 순서와 정점별 진입차수를 확인합니다.
- 3단계별 묶음에서 한꺼번에 할 수 있는 일들을 봅니다.
- 4사이클이 있으면 어느 정점이 순환에 얽혔는지 짚어 줍니다.
자주 묻는 질문
진입차수가 0인 정점을 꺼내고 그 정점이 가리키던 화살표를 지우기를 되풀이합니다(칸 알고리즘). 진입차수란 그 정점으로 들어오는 화살표 수, 곧 아직 안 끝난 선행 조건의 개수입니다. 0인 것은 지금 바로 할 수 있는 일이므로 순서에 넣고, 지운 뒤 다시 0이 된 것을 이어서 꺼냅니다.
대부분 여러 개입니다. 진입차수가 0인 정점이 한 번에 여럿이면 아무 것이나 먼저 골라도 되기 때문입니다. 이 계산기는 그럴 때 이름이 앞서는 것을 먼저 꺼내 그중 하나를 보여 주고, 가능한 순서가 모두 몇 가지인지를 따로 세어 알려 줍니다(정점 16개까지).
위상 정렬 자체가 존재하지 않습니다. A → B → C → A라면 어느 것도 먼저 할 수 없기 때문입니다. 칸 알고리즘에서는 진입차수 0인 정점이 더는 없는데 남은 정점이 있는 것으로 드러나며, 그 남은 정점들이 곧 순환에 얽힌 것들입니다. 빌드 도구가 circular dependency라며 멈출 때 알려 주는 목록이 이것입니다.
일을 아무리 많은 사람에게 나눠 맡겨도 줄일 수 없는 최소 단계 수입니다. 그 사슬 위의 일들은 서로 기다려야 하기 때문입니다. 반대로 같은 단계에 있는 일들은 서로 기다릴 필요가 없어 한꺼번에 할 수 있어, 일정을 줄이려면 임계경로 위의 일부터 손대야 합니다.
선수과목 순서, 빌드·패키지 설치 순서, 스프레드시트 수식 갱신 순서, 작업 일정이 모두 같은 문제입니다. «A를 끝내야 B를 할 수 있다»는 관계만으로 한 줄 순서를 찾는 일이며, 관계가 돌아오지만 않으면 언제나 답이 있습니다.
전송되지 않습니다. 모든 계산은 브라우저 안에서 이뤄지고, 입력값은 이 기기에만 남습니다.
알아두면 좋은 점
- 진입차수가 0인 정점이 여럿일 때 이름이 앞서는 것을 먼저 꺼냅니다. 다른 규약을 쓰면 순서가 달라지지만, 선행 관계를 모두 지켰다면 어느 쪽도 옳은 답입니다.
- 가능한 순서의 가짓수는 부분집합 DP로 세므로 정점 16개까지만 계산합니다. 그보다 많으면 «세지 않았습니다»로 표시합니다.
- 같은 간선을 여러 번 적어도 한 번으로 셉니다. 그러지 않으면 진입차수가 실제보다 커져 순서가 나오지 않습니다.
- 자기 자신을 가리키는 간선은 그 자체가 사이클이므로 위상 정렬이 존재하지 않습니다.
- 단계별 묶음은 «모든 일이 같은 시간이 걸린다»고 볼 때의 값입니다. 일마다 걸리는 시간이 다르면 가중치를 넣은 임계경로(CPM) 계산이 따로 필요합니다.
함께 보면 좋은 도구
마지막 검증: 2026년 9월 1일 · 결과는 참고용 추정치입니다.