알고리즘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
댓글을 사용할 수 없습니다.