kim031504   4년 전

위상정렬을 통해

큐의 자료구조로 작업을 하였습니다.

큐가 빌 때까지 while문을 돌고, 안에서 N만큼 점검 작업이 있어서 N^2이 나오는 것 같은데,

이것 보다 더 줄일 수 있는 방법이 있을까요...?? ㅠㅠ 

wjsqjawns   4년 전

기존에 썼던 댓글에 첨부했던 코드가 너무 직접적이라 삭제했습니다.

대신, O(N^2)일 필요가 없는 이유를 말씀드리겠습니다.

큐에 있는 정점들은 어차피 while문을 돌 때마다 하나씩 빠져나오고, 큐에 있는 정점들은 들어오는 간선이 없다는 것, 그리고 앞서 큐에 들어온 정점들이 우선권이 있다는 것은 당연합니다.

즉, 큐에 있는 정점들은 방문 여부를 확인할 필요가 없습니다. 방문을 할 수가 없으니까요.

또한, 매 반복(while)마다 큐에 있는 정점과 연결된 정점들의 들어오는 간선 수를 줄이고, 만약 해당 정점의 들어오는 간선 수가 0개가 된다면, 이를 큐에 추가합니다.

그럼 방법은 간단합니다. 큐의 가장 앞에 있는 값을 result에 넣어주기만 하면 됩니다.

굳이 탐색을 할 필요가 없습니다.


그리고, 40번째 줄의 반복문에서, 탈출을 할 필요가 없습니다. 탈출을 하지 않으면 알아서 처음부터 들어오는 간선이 없는 정점들을 모두 큐에 넣어주는데, 탈출을 해버리면 작성자님께서 작성하신 것처럼 일일이 확인해야 합니다.

kim031504   4년 전

우와! 감사합니다!

불필요한 연산을 하는 코드를 지우고,

덱으로 구현하였더니 맞았습니다!

지저분하게 작성한 코드인데, 잘 분석해주셔서 감사해요~!

댓글을 작성하려면 로그인해야 합니다.