반응형
https://www.acmicpc.net/problem/11286
가장 작은 값을 출력하는 게 아니라 절댓값이 작은 수를 출력하는 문제이다.
그렇게 하기 위해서는 큐에 값을 담을 때 값을 비교해서 담도록 하면 된다.
PriorityQueue<Integer> pq= new PriorityQueue<>((o1,o2)->{
int abs1 =Math.abs(o1);
int abs2 =Math.abs(o2);
return abs1==abs2? Integer.compare(o1,o2):Integer.compare(abs1, abs2);
});
우선순위 큐를 선언할 때 값을 비교해서 넣도록 하면 되는데,
비교하는 값끼리 절대 값이 같을 때는 그냥 값이 작은 것 (-1 vs 1 일 때는 -1, 1 순으로)이 앞으로 가도록,
절댓값이 같지 않을 때는 절댓값이 작은 것 순(-2vs1 일 때는 1, -2 순으로)으로 저장하도록 한다.
import java.util.*;
public class Main {
static int N;
public static void main(String[] args){
Scanner sc= new Scanner(System.in);
N =sc.nextInt();
PriorityQueue<Integer> pq= new PriorityQueue<>((o1,o2)->{
int abs1 =Math.abs(o1);
int abs2 =Math.abs(o2);
return abs1==abs2? Integer.compare(o1,o2):Integer.compare(abs1, abs2);
});
for(int i=0;i<N;i++) {
int n = sc .nextInt();
if(n==0) {
if(pq.size()!=0)
System.out.println(pq.poll());
else
System.out.println(0);
}else {
pq.add(n);
}
}
}// main()
}// class Main
728x90
반응형
'코딩테스트 > 백준' 카테고리의 다른 글
[Java] 백준 11660 : 구간 합 구하기 5 (0) | 2023.02.17 |
---|---|
[Java] 백준 2538 : 영역 구하기 (0) | 2023.02.16 |
[Java] 백준 11403 : 경로 찾기 (0) | 2023.02.15 |
[Java] 백준 1074 : Z (0) | 2023.02.15 |
[Java] 백준 1629 : 곱셈 (0) | 2023.02.13 |
댓글