[백준]2252번 줄세우기 - python (위상정렬)

2025. 5. 19. 14:57·코딩테스트/백준

문제

 

 

 

이 문제를 풀기 위해서는 먼저 위상정렬이라는 개념을 알아햐한다

 

위상정렬이란?

위상 정렬(Topology Sort)이란 방향 그래프의 모든 노드를 방향성을 모두 지키며 순서대로 나열하는 것을 의미합니다. 

 

  • 진입 차수(Indegree) : 특정한 노드로 들어오는 간선의 개수
  • 진출 차수(Outdegree) : 특정한 노드에서 나가는 간선의 개수

 

동작과정은

1. 진입차수가 0인 모든 노드를 큐에 넣고

2. 큐가빌 때까지 다음의 과정을 반복한다.

   1. 큐에서 원소를 꺼내고 해당 노드에서 나가는 간선을 그래프에서 제거한다.

   2. 새롭게 진입차수가 0이된 노드를 큐에 넣는다.

 

 

이렇게 되면 모든 노드의 방향성을 지켜가면서 순서대로 나열 할 수 있게 된다.

 

이때 시간 복잡도는 모든 노드를 확인하며 해당 노드와 연결된 간선을 제거해야하므로 시간복잡도 O(V+E)가 됩니다.

 

 

정답코드

# 알고리즘 -> 이분탐색? 큐? 스택?
from collections import deque
n,m = map(int,input().split())
graph = [[]for i in range(n+1)]
degree = [0 for i in range(n+1)]
answer = []
q = deque()

for i in range(m):
    a, b = map(int,input().split())
    graph[a].append(b)
    degree[b] += 1
#진입차수가 0인 애들 먼저 큐에 삽입
for i in range(1,n+1):
    if degree[i] == 0:
        q.append(i)

while q:
    tmp = q.popleft()
    answer.append(tmp)
    #해당 노드와 연결된 간선 제거
    for i in graph[tmp]:
        degree[i] -= 1
        if degree[i] == 0:
            q.append(i)

print(*answer)

'코딩테스트 > 백준' 카테고리의 다른 글

[백준] 14890번 경사로  (0) 2025.06.16
[백준] 1238 파티 -python 파이썬  (0) 2025.05.21
[백준]11657 타임머신 - Python 파이썬  (0) 2025.04.18
[백준] 1253번 좋다 - python 파이썬  (0) 2025.04.17
[백준] 1744번 수 묶기 - python 파이썬  (0) 2025.03.20
'코딩테스트/백준' 카테고리의 다른 글
  • [백준] 14890번 경사로
  • [백준] 1238 파티 -python 파이썬
  • [백준]11657 타임머신 - Python 파이썬
  • [백준] 1253번 좋다 - python 파이썬
hiwon
hiwon
천천히 굴러가는 코딩일기
  • hiwon
    하이원의 코딩 일기
    hiwon
  • 전체
    오늘
    어제
    • 분류 전체보기 (83)
      • 프론트엔드 (0)
        • react (0)
      • 백엔드 (13)
        • node.js (1)
        • spring (6)
      • 코딩테스트 (57)
        • 백준 (41)
        • 프로그래머스 (15)
      • 프로디지털아카데미 (9)
        • 클라우드 (1)
        • JavaScript (1)
      • github (1)
      • AWS (2)
      • Infra (1)
  • 블로그 메뉴

    • 홈
    • 태그
    • 방명록
  • 링크

  • 공지사항

  • 인기 글

  • 태그

    투포인터
    Java
    신한투자증권
    K디지털트레이닝
    코딩테스트
    프디아
    백준
    알고리즘
    알파코
    BFS
    IT기획
    UnionFind
    백트래킹
    깃허브
    파이썬
    bastion host
    AWS
    EC2
    알파코캠퍼스
    프로디지털아카데미
    백엔드
    kdt교육
    다익스트라
    spring
    그리디
    github
    python
    코테
    MSA
    프로그래머스
  • 최근 댓글

  • 최근 글

  • hELLO· Designed By정상우.v4.10.0
hiwon
[백준]2252번 줄세우기 - python (위상정렬)
상단으로

티스토리툴바