다희의 코딩 성장일기

[백준] 11286. 절대값 힙 (자바 JAVA) 본문

Algorithm/백준 BOJ

[백준] 11286. 절대값 힙 (자바 JAVA)

ilmiodiario 2021. 9. 7. 23:41

[ 문제 ]  [백준] 11286. 절대값 힙 (자바 JAVA)

 

문제 링크 : https://www.acmicpc.net/problem/11286

 

11286번: 절댓값 힙

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

www.acmicpc.net


# 접근 방법 및 풀이 

 

  • 우선순위 큐 문제다. 우선순위 큐에 원하는 기준을 통해 정렬을 해야하는데, 절대값원래 값을 담는 클래스를 만들어 구현했다.
  • 절대값이 가장 작은 값을 뽑는 형태로 최소힙인데, 그값이 여러개 일때는 가장 작은 수를 출력해야한다.
  • 문제 예제처럼 1과 -1이 있다면 둘의 절대값이 1로 같지만, -1을 출력해야한다.
  • Point 클래스를 만들어 x에는 원래값, y에는 절대값을 넣었다. Comparable을 구현해 정렬했다.

# 주의할 점 

 

  • 딱히 없음

 

JAVA 코드
package Silver;

import java.awt.Point;
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.PriorityQueue;

public class bj11286_절대값힙 {
	static class Point implements Comparable<Point>{
		int x, y;	
		public Point(int x, int y) {
			this.x = x;
			this.y = y;
		}
		@Override
		public int compareTo(Point o) {
			if(this.y == o.y)
				return this.x - o.x;
			return this.y-o.y;
		}		
	}
	public static void main(String[] args) throws NumberFormatException, IOException {
		BufferedReader in = new BufferedReader(new InputStreamReader(System.in));
		int n = Integer.parseInt(in.readLine());
		PriorityQueue<Point> queue = new PriorityQueue<Point>();
		int arr[] = new int[n];
		for (int i = 0; i < n; i++) {
			int num = Integer.parseInt(in.readLine());
			if(num == 0) {
				if(!queue.isEmpty())
					System.out.println(queue.poll().x);
				else
					System.out.println(0);
			}else {
				queue.add(new Point(num, Math.abs(num)));
			}
		}
	}
}

 

 

REVIEW

Comments