[BOJ] Q2458 키순서
        
         
  
      [BOJ] Q2458 키순서
Question
Language: Python
Difficulty: Gold 4
해당 문제는 10159와 유사한 방식으로 풀이하면 되는 문제이다.
floyd_warshall algorithm을 활용해서 임의의 노드에 대해서 다른 노드에 대한 거리(도달 여부)를 구해서 해당 노드에 대한 순서를 구할 수 있다.
해당 문제에서의 간선은 노드 간에 비교가 가능하다는 것을 의미하기 때문에 노드 간에 경로가 있다는 것은 노드들간에 비교가 가능함을 의미한다.
floyd-warshall
for k in range(n):
    for i in range(n):
        for j in range(n):
            graph[i][j]=min(graph[i][j],graph[i][k]+graph[k][j])
Solution
from math import inf
def solution():
    for k in range(n):
        for i in range(n):
            for j in range(n):
                graph[i][j]=min(graph[i][j],graph[i][k]+graph[k][j])
   
    answer=0
    for i in range(n):
        graph[i][i]=0
        count=0
        for j in range(n):
            if graph[i][j] != inf or graph[j][i] != inf:
                count+=1
        
        if count==n:
            answer+=1
    
    print(answer)
            
if __name__ == "__main__":
    n,m=map(int,input().split())
    graph=[[inf] * n for _ in range(n)]
    for _ in range(m):
        v1,v2=map(int,input().split())
        graph[v1-1][v2-1]=1
    
    solution()
      
댓글남기기