코딩테스트/백준

[Java] 백준 11286 : 절대값 힙

플래시🦥 2023. 2. 16.
반응형
https://www.acmicpc.net/problem/11286
 

11286번: 절댓값 힙

첫째 줄에 연산의 개수 N(1≤N≤100,000)이 주어진다. 다음 N개의 줄에는 연산에 대한 정보를 나타내는 정수 x가 주어진다. 만약 x가 0이 아니라면 배열에 x라는 값을 넣는(추가하는) 연산이고, x가 0

www.acmicpc.net


가장 작은 값을 출력하는 게 아니라 절댓값이 작은 수를 출력하는 문제이다. 

그렇게 하기 위해서는 큐에 값을 담을 때 값을 비교해서 담도록 하면 된다. 

 

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

댓글