위상 정렬 - 부모가 먼저 나오는 로그
요구사항: LOG는 "최신순 나열"이 아니라 부모 커밋이 항상 자식보다 먼저 출력되어야 합니다. 이런 정렬을 **위상 정렬(topological sort)**이라고 합니다.
간단한 방법 (DFS 후위 순회):
- 아직 출력 안 된 커밋을 하나 고른다
- 그 커밋의 부모들을 먼저 재귀적으로 출력하고
- 마지막에 자기 자신을 출력한다
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