기본적인 메소드 (우선순위 큐)
add()
: 우선순위 큐에 원소를 추가. 큐가 꽉 찬 경우 에러 발생
offer()
: 우선순위 큐에 원소를 추가. 값 추가 실패 시 false를 반환
poll()
: 우선순위 큐에서 첫 번째 값을 반환하고 제거, 비어있으면 null 반환
remove()
: 우선순위 큐에서 첫 번째 값을 반환하고 제거, 비어있으면 에러 발생
isEmpty()
: 우선순위 큐에서 첫 번째 값을 반환하고 제거, 비어있으면 에러 발생
clear()
: 우선순위 큐를 초기화
size()
: 우선순위 큐에 포함되어 있는 원소의 수를 반환
import java.util.Collections;
import java.util.PriorityQueue;
import java.util.Scanner;
public class Practice34 {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
int N = sc.nextInt(); //카드 묶음의 수
PriorityQueue<Integer> plusPq = new PriorityQueue<>(Collections.reverseOrder()); //양수는 내림차순
PriorityQueue<Integer> minusPq = new PriorityQueue<>(); //음수는 내림차순 -> 작은 숫자끼리 즉, 음수 중에서 절댓값이 큰 것들끼리 묶어야하므로
int one = 0;
int zero = 0;
for(int i = 0; i < N; i++) { //4개의 그룹으로 분리
int data = sc.nextInt();
if(data > 1) {
plusPq.add(data);
}else if(data == 1) {
one++;
}else if(data == 0) {
zero++;
}else {
minusPq.add(data);
}
}
int sum = 0;
//양수 처리
while(plusPq.size() > 1) {
int first = plusPq.remove();
int second = plusPq.remove();
sum = sum + first * second;
}
if(!plusPq.isEmpty()) {
sum = sum + plusPq.remove();
}
//음수 처리
while(minusPq.size() > 1) {
int first = minusPq.remove();
int second = minusPq.remove();
sum = sum + first * second;
}
if(!minusPq.isEmpty()) {
if(zero == 0) {
sum = sum + minusPq.remove();
}
}
sum = sum + one;
System.out.println(sum);
sc.close();
}
}