문제

✏️https://www.acmicpc.net/problem/1744

해설

static PriorityQueue<Integer> plusQueue = new PriorityQueue<>(Collections.reverseOrder());
//Collection.reverseOrder() 메서드 사용해서 우선순위 기준을 역순으로 바꾼다.

static PriorityQueue<Integer> minusQueue = new PriorityQueue<>();

우선순위 큐 2개를 선언하고 음수 전용 큐와 양수 전용 큐를 구별해서 넣어준다.
이후 값을 꺼낼때 분기 조건을 최소(4개) 고민해서 개발하자

코드

import java.util.*;
import java.io.*;

public class J1744 {
    static PriorityQueue<Integer> plusQueue = new PriorityQueue<>(Collections.reverseOrder());
    static PriorityQueue<Integer> minusQueue = new PriorityQueue<>();

    public static void main(String[] args) throws IOException {
        BufferedReader buffer = new BufferedReader(new InputStreamReader(System.in));
        int index= Integer.parseInt(buffer.readLine());

        for(int i =0; i < index; i++){
            int num = Integer.parseInt(buffer.readLine());

            if(num >0) plusQueue.add(num);
            else minusQueue.add(num);
        }
        int sum = 0;


        while(!plusQueue.isEmpty()){
            int value = plusQueue.poll();
            if(value == 1){
                sum += value;
            }else if(plusQueue.size()>0){
                int value2 = plusQueue.poll();
                if (value2 == 1){
                    sum += value + value2;
                }
               else sum += value * value2;
            }else sum += value;
        }
        while(!minusQueue.isEmpty()){
            int value = minusQueue.poll();
            if(minusQueue.size()>0) {
                int value2 = minusQueue.poll();
                sum += value2*value;
            }
            else sum += value;
        }
        System.out.println(sum);
    }
}
profile
비슷한 어려움을 겪는 누군가에게 도움이 되길

0개의 댓글