https://www.acmicpc.net/problem/11286
접근 방식
- 절댓값을 기준으로 정렬을 해야하는 상황
- 우선순위 큐의 정렬 기준을 변경해줘서 진행해야 하는 문제
참고 자료
우선순위 큐
// 1. 최소힙 (오름차순 정렬)
PriorityQueue<Integer> minHeap= new PriorityQueue<>();
// 2. 최대힙 (내림차순 정렬)
PriorityQeueu<Integer> maxHeap = new PriorityQueue<>(Collections.reserveOrder());
우선순위 큐 정렬 조건 수정하기
Compare 오버라이딩 하기
시행 착오
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 | package d0812; import java.io.BufferedReader; import java.io.IOException; import java.io.InputStreamReader; import java.util.Collections; import java.util.PriorityQueue; import java.util.StringTokenizer; public class Main_11286_7조 { public static void main(String[] args) throws IOException { BufferedReader br = new BufferedReader(new InputStreamReader(System.in)); int n=Integer.parseInt(br.readLine()); // 연산의 개수 // 낮은 숫자가 우선 순위인 int형 우선순위 큐 선언 // 절댓값을 기준으로 정렬을 해줘야 하므로 Compare을 오버라이딩 해서 정렬 기준을 변경해줘야함. PriorityQueue<Integer> queue= new PriorityQueue<>((o1,o2)->{ int num1=Math.abs(o1); int num2=Math.abs(o2); if(num1==num2) return o1>o2 ? 1:-1; return num1-num2; }); for (int i = 0; i < n; i++) { int temp=Integer.parseInt(br.readLine()); if (temp!=0) { queue.add(temp); }else if(temp==0) { // 가장 작은 값 출력 후, 제거 if(queue.isEmpty()) System.out.println("0"); else System.out.println(queue.poll()); } } } } /* 1. 배열에 x를 넣는다. 2. 절댓값이 가장 작은 값을 출력,제거 여러개일 경우 -> */ | cs |
'여니의 취준 준비 > 코딩테스트 (Java)' 카테고리의 다른 글
[17281]⚾ in Java (0) | 2022.08.12 |
---|---|
[4012] 요리사 in Java (0) | 2022.08.12 |
[15686] 치킨 배달 in Java (0) | 2022.08.12 |
[3040] 백설 공주와 일곱 난쟁이 in Java (0) | 2022.08.11 |
[*16637*] 괄호 추가하기 in Java (0) | 2022.08.11 |