<Algorithm> 86. 1766번 문제집
by BFine반응형
1. 1766번 문제집
우선순위 큐를 이용한 위상정렬 문제
가중치와 정점으로 정렬을 하려고 했는데 생각해보니 정점으로만 위상정렬을 하면되는 간단한 문제였다.
선수과목이 있는데 가나다 순으로 과목을 이수하라는 의미와 같다.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 | import java.io.BufferedReader; import java.io.IOException; import java.io.InputStreamReader; import java.util.ArrayList; import java.util.Comparator; import java.util.LinkedList; import java.util.PriorityQueue; import java.util.Queue; import java.util.StringTokenizer; public class Main { public static ArrayList<Integer> alist[]; public static int prio[]; public static StringBuilder sb = new StringBuilder(""); public static void main(String[] args) throws IOException { BufferedReader br = new BufferedReader(new InputStreamReader(System.in)); StringTokenizer st = new StringTokenizer(br.readLine()); int N = Integer.parseInt(st.nextToken())+1; int M = Integer.parseInt(st.nextToken()); alist = new ArrayList[N]; prio = new int[N]; visited = new boolean[N]; for(int i = 0; i < N ; i++) { alist[i] = new ArrayList<>(); } for(int i = 0; i < M ; i++) { st = new StringTokenizer(br.readLine()); int a = Integer.parseInt(st.nextToken()); int b = Integer.parseInt(st.nextToken()); alist[a].add(b); prio[b]++; } bfs(N); System.out.println(sb.toString()); } public static boolean[] visited; public static void bfs(int N) { PriorityQueue<Node> pq = new PriorityQueue<>(new Comparator<Node>() { @Override public int compare(Node o1, Node o2) { // TODO Auto-generated method stub return o1.vertax - o2.vertax; } }); for(int i = 1 ; i < N ; i++) { if(prio[i] == 0) { pq.add(new Node(i)); } } while(!pq.isEmpty()) { int vertax = pq.remove().vertax; sb.append(vertax + " "); for(Integer in: alist[vertax]) { prio[in]--; if(prio[in] == 0) { pq.add(new Node(in)); } } } } } class Node { int vertax; public Node(int v) { super(); this.vertax = v; } } | cs |
참고 & 출처
반응형
'공부(2018~2019) - 스킨변경전 > Algorithm' 카테고리의 다른 글
<Algorithm> 88. 카펫(프로그래머스) (0) | 2019.01.15 |
---|---|
<Algorithm> 87. 2512번 예산 (0) | 2019.01.14 |
<Algorithm> 85. 15683번 감시 (0) | 2018.10.18 |
<Algorithm> 84. 14889번 스타트와 링크 (0) | 2018.10.11 |
<Algorithm> 83. 13458번 시험감독 (0) | 2018.09.24 |
블로그의 정보
57개월 BackEnd
BFine