도구스개발

위상 정렬 계산기

선행 관계를 넣으면 진입차수를 세어 위상 정렬 순서를 내고, 사이클이 있으면 어느 정점이 얽혔는지 짚어 줍니다. 나눠 맡겨도 줄일 수 없는 최소 단계와 가능한 순서의 가짓수도 함께 나옵니다.

선행 관계 (한 줄에 «먼저 뒤»)

«자료구조 알고리즘»은 자료구조를 끝내야 알고리즘을 할 수 있다는 뜻입니다. 화살표(->)나 쉼표로 써도 되고, 한 줄에 셋 이상 적으면 사슬로 읽습니다.

위상 정렬 순서

이산수학 → 프로그래밍 → 자료구조 → 알고리즘 → 캡스톤

정점 5개 · 간선 5개

가장 긴 사슬(임계경로)이산수학 → 자료구조 → 알고리즘 → 캡스톤
나눠 맡겨도 필요한 최소 단계4단계
가능한 순서의 가짓수2가지
단계한꺼번에 할 수 있는 것
1이산수학, 프로그래밍
2자료구조
3알고리즘
4캡스톤
정점진입차수가장 이른 단계
알고리즘23
이산수학01
자료구조22
캡스톤14
프로그래밍01
진입차수가 0인 것부터 꺼냅니다. 진입차수란 그 정점으로 들어오는 화살표 수, 곧 «아직 안 끝난 선행 조건»의 개수입니다. 0인 것을 꺼내 순서에 넣고 그것이 가리키던 화살표를 지우면 다음 것들의 진입차수가 줄어듭니다. 이것을 되풀이하는 것이 칸(Kahn) 알고리즘이고, 진입차수 표가 곧 그 과정의 출발점입니다.
제약을 모두 지키는 순서가 2가지입니다. 진입차수가 0인 것이 한 번에 여럿이면 아무 것이나 먼저 골라도 되기 때문입니다. 이 계산기는 그럴 때 이름이 앞서는 것을 먼저 꺼내 그중 하나를 보여 줍니다 — 교재나 다른 도구의 답과 달라도 선행 관계를 다 지켰으면 맞습니다.
사람을 아무리 늘려도 4단계는 걸립니다. 이산수학 → 자료구조 → 알고리즘 → 캡스톤이 서로 기다려야 하는 사슬이기 때문입니다. 반대로 같은 단계에 있는 것들은 서로 기다릴 필요가 없어 한꺼번에 할 수 있습니다. 일정을 줄이려면 이 사슬 위의 일을 줄이거나 쪼개야 하고, 그 밖의 일을 빨리 끝내 봐야 전체는 그대로입니다.
선수과목, 빌드 의존성, 스프레드시트 수식 갱신, 패키지 설치 순서가 모두 같은 문제입니다. «A를 끝내야 B를 할 수 있다»는 관계만으로 한 줄 순서를 찾는 일이고, 관계가 돌아오지만 않으면 언제나 답이 있습니다.

사용 방법

  1. 1한 줄에 «먼저 뒤» 순서로 선행 관계를 적습니다. 화살표나 쉼표로 써도 됩니다.
  2. 2위상 정렬 순서와 정점별 진입차수를 확인합니다.
  3. 3단계별 묶음에서 한꺼번에 할 수 있는 일들을 봅니다.
  4. 4사이클이 있으면 어느 정점이 순환에 얽혔는지 짚어 줍니다.

자주 묻는 질문

진입차수가 0인 정점을 꺼내고 그 정점이 가리키던 화살표를 지우기를 되풀이합니다(칸 알고리즘). 진입차수란 그 정점으로 들어오는 화살표 수, 곧 아직 안 끝난 선행 조건의 개수입니다. 0인 것은 지금 바로 할 수 있는 일이므로 순서에 넣고, 지운 뒤 다시 0이 된 것을 이어서 꺼냅니다.

대부분 여러 개입니다. 진입차수가 0인 정점이 한 번에 여럿이면 아무 것이나 먼저 골라도 되기 때문입니다. 이 계산기는 그럴 때 이름이 앞서는 것을 먼저 꺼내 그중 하나를 보여 주고, 가능한 순서가 모두 몇 가지인지를 따로 세어 알려 줍니다(정점 16개까지).

위상 정렬 자체가 존재하지 않습니다. A → B → C → A라면 어느 것도 먼저 할 수 없기 때문입니다. 칸 알고리즘에서는 진입차수 0인 정점이 더는 없는데 남은 정점이 있는 것으로 드러나며, 그 남은 정점들이 곧 순환에 얽힌 것들입니다. 빌드 도구가 circular dependency라며 멈출 때 알려 주는 목록이 이것입니다.

일을 아무리 많은 사람에게 나눠 맡겨도 줄일 수 없는 최소 단계 수입니다. 그 사슬 위의 일들은 서로 기다려야 하기 때문입니다. 반대로 같은 단계에 있는 일들은 서로 기다릴 필요가 없어 한꺼번에 할 수 있어, 일정을 줄이려면 임계경로 위의 일부터 손대야 합니다.

선수과목 순서, 빌드·패키지 설치 순서, 스프레드시트 수식 갱신 순서, 작업 일정이 모두 같은 문제입니다. «A를 끝내야 B를 할 수 있다»는 관계만으로 한 줄 순서를 찾는 일이며, 관계가 돌아오지만 않으면 언제나 답이 있습니다.

전송되지 않습니다. 모든 계산은 브라우저 안에서 이뤄지고, 입력값은 이 기기에만 남습니다.

알아두면 좋은 점

  • 진입차수가 0인 정점이 여럿일 때 이름이 앞서는 것을 먼저 꺼냅니다. 다른 규약을 쓰면 순서가 달라지지만, 선행 관계를 모두 지켰다면 어느 쪽도 옳은 답입니다.
  • 가능한 순서의 가짓수는 부분집합 DP로 세므로 정점 16개까지만 계산합니다. 그보다 많으면 «세지 않았습니다»로 표시합니다.
  • 같은 간선을 여러 번 적어도 한 번으로 셉니다. 그러지 않으면 진입차수가 실제보다 커져 순서가 나오지 않습니다.
  • 자기 자신을 가리키는 간선은 그 자체가 사이클이므로 위상 정렬이 존재하지 않습니다.
  • 단계별 묶음은 «모든 일이 같은 시간이 걸린다»고 볼 때의 값입니다. 일마다 걸리는 시간이 다르면 가중치를 넣은 임계경로(CPM) 계산이 따로 필요합니다.

함께 보면 좋은 도구

마지막 검증: 2026년 9월 1일 · 결과는 참고용 추정치입니다.