위상 정렬 개념을 책에서 봤는데요. 방향 그래프에서 순서를 정한다, 진입차수(indegree)가 0인 것부터 뽑는다 뭐 이런 설명은 이해가 됩니다. 근데 이걸 실제로 어떤 상황에서 꺼내 써야 하는지 그 감이 안 잡혀요.


대충 이런 식으로 짜는 거 맞죠?


q = [노드 for 노드 in range(N) if indegree[노드] == 0]
while q:
    cur = q.pop()
    result.append(cur)
    for nxt in graph[cur]:
        indegree[nxt] -= 1
        if indegree[nxt] == 0:
            q.append(nxt)


제가 생각하기론 "A를 하려면 B가 먼저 끝나야 한다" 같은 선후 관계가 있는 문제, 예를 들면 과목 선수과목 순서나 빌드 의존성 순서 이런 데 쓰는 것 같은데 맞나요?


그리고 궁금한 게, 만약 사이클이 있으면 위상 정렬이 안 된다고 하던데, 그럼 결과 리스트에 담긴 노드 개수가 전체 노드 수보다 적으면 그게 사이클이 있다는 뜻으로 봐도 되는 건가요? 실무나 코테에서 위상 정렬이 답인 문제를 어떻게 알아채는지 그 판단 기준이 제일 궁금합니다.