알고리즘104 :: BOJ_1766_문제집
import java.util.*;
public class Main {
static class Empty implements Comparator<Integer>{
public int compare(int a, int b) {
return Integer.compare(a, b);
}
@Override
public int compare(Integer o1, Integer o2) {
// TODO Auto-generated method stub
return o1-o2;
}
}
public static void main(String[] args) {
// TODO Auto-generated method stub
Scanner sc = new Scanner(System.in);
int n = sc.nextInt();
int m = sc.nextInt();
ArrayList<Integer>[] al = new ArrayList[n+1];
for(int i=1; i<=n; i++) {
al[i] = new ArrayList<>();
}
int[] indegree = new int[n+1];
for(int i=0; i<m; i++) {
int first = sc.nextInt();
int second = sc.nextInt();
al[first].add(second);
++indegree[second];
}
PriorityQueue<Integer> pq = new PriorityQueue<>(1, new Empty());
for(int i=1; i<=n; i++) {
if(indegree[i]==0) {
pq.add(i);
}
}
while(!pq.isEmpty()) {
int k = pq.poll();
System.out.print(k+" ");
for(int y : al[k]) {
indegree[y]-=1;
if(indegree[y] == 0) {
pq.add(y);
}
}
}
}
}
- N개의 문제는 모두 풀어야 한다.
- 먼저 푸는 것이 좋은 문제가 있는 문제는, 먼저 푸는 것이 좋은 문제를 반드시 먼저 풀어야 한다.
- 가능하면 쉬운 문제부터 풀어야 한다.
주어진 3개의 조건을 만족하기 위해서 위상정렬과 우선순위 큐(민-힙) 을 사용해서 해결해야 하는 문제 였습니다.
'알고리즘' 카테고리의 다른 글
알고리즘106 :: BOJ_11726_2XN타일링 (0) | 2020.09.27 |
---|---|
알고리즘105 :: BOJ_2056_작업 (0) | 2020.09.26 |
알고리즘104 :: 최소 스패닝 트리(MST) (0) | 2020.09.24 |
알고리즘102 :: KAKAO_셔틀버스 (0) | 2020.09.22 |
알고리즘101 :: 프로그래머스 - 소수찾기 (0) | 2020.09.21 |
댓글
이 글 공유하기
다른 글
-
알고리즘106 :: BOJ_11726_2XN타일링
알고리즘106 :: BOJ_11726_2XN타일링
2020.09.27 -
알고리즘105 :: BOJ_2056_작업
알고리즘105 :: BOJ_2056_작업
2020.09.26 -
알고리즘104 :: 최소 스패닝 트리(MST)
알고리즘104 :: 최소 스패닝 트리(MST)
2020.09.24 -
알고리즘102 :: KAKAO_셔틀버스
알고리즘102 :: KAKAO_셔틀버스
2020.09.22