Skip to content

위상 정렬 - 부모가 먼저 나오는 로그 ​

요구사항: LOG는 "최신순 나열"이 아니라 부모 커밋이 항상 자식보다 먼저 출력되어야 합니다. 이런 정렬을 **위상 정렬(topological sort)**이라고 합니다.

간단한 방법 (DFS 후위 순회):

  1. 아직 출력 안 된 커밋을 하나 고른다
  2. 그 커밋의 부모들을 먼저 재귀적으로 출력하고
  3. 마지막에 자기 자신을 출력한다
python
def topo_visit(commit, visited, out):
    """부모를 먼저 방문한 뒤 자신을 기록하는 함수"""
    if commit.hash in visited:
        return                    # 이미 처리한 커밋이면 건너뜀
    visited.add(commit.hash)
    for parent in commit.parents: # 1) 부모 먼저
        topo_visit(parent, visited, out)
    out.append(commit)            # 2) 그다음 자신

이렇게 하면 모든 커밋에서 "조상들이 항상 앞에" 오는 순서가 보장됩니다.


출처: Codyssey-B1/B5-2