Mini

11286번: 절대값 힙 본문

Algorithm/boj

11286번: 절대값 힙

Mini_96 2022. 8. 12. 09:51

https://www.acmicpc.net/problem/11286

 

11286번: 절댓값 힙

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

www.acmicpc.net

 

if(입력!=0)

     add(입력>0) (절대값,+1)

    add(입력<0) (절대값,-1)

 

if(입력==0)

      if(빔) 0출력

      if(안빔) 우선순위큐는 자동정렬-> top에있는거 출력

 

-add

큐에 배열을 (절대값, 1) (절대값, -1)로 넣음 => 곱하면 원래값이 나오도록

 

-comparator

절대값이 같으면 -> 오리지날 값끼리 비교 -> 작은거 위로

절대값이 다르면-> 절대값끼리 비교 -> 작은거 위로

 

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.Comparator;
import java.util.PriorityQueue;
import java.util.StringTokenizer;

public class Main_11286_유동훈 {

	static int N;
	static PriorityQueue<int[]> q = new PriorityQueue<>(new Comparator<int[]>() 
	{
		@Override
		public int compare(int[] o1, int[] o2) {
			// TODO Auto-generated method stub
			if(Math.abs(o1[0])==Math.abs(o2[0])) return o1[0]*o1[1]-o2[0]*o2[1];
			return Math.abs(o1[0])-Math.abs(o2[0]);
		}
	
	});
	
	
	public static void main(String[] args) throws IOException {
		BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
        N = Integer.parseInt(br.readLine());
        StringTokenizer st;
        //st = new StringTokenizer(br.readLine());
        StringBuilder sb= new StringBuilder();
        
        for(int i=0;i<N;++i)
        {
        	int input=Integer.parseInt(br.readLine());
        	
        	if(input!=0)
        	{
        		if(input>0)
        		{
        			q.add(new int[] {Math.abs(input),1});
        		}
        		else
        		{
        			q.add(new int[] {Math.abs(input),-1});
        		}
        	}
        	else
        	{
        		if(q.isEmpty())
        			sb.append(0+"\n");
        		else
        		{
        			sb.append(q.peek()[0]*q.poll()[1]+"\n");
        		}
        	}

        }
        System.out.println(sb);
        
        
	}

}

'Algorithm > boj' 카테고리의 다른 글

백준: 11047 동전 0  (0) 2022.08.12
백준 : 15686 치킨배달  (0) 2022.08.12
2961번 : 도영이가 만든 맛있는 음식  (0) 2022.08.11
3040번: 백설 공주와 일곱 난쟁이  (0) 2022.08.11
16926번: 배열돌리기1  (0) 2022.08.10