문제 설명


문제 분석


슈도코드

구현
public class 수를_묶어서_최댓값_만들기_1744 {
public static void main(String[] args) {
Scanner scan = new Scanner(System.in);
int N = scan.nextInt(); // 카드 묶음 수
Queue<Integer> plusQ = new PriorityQueue<>(Collections.reverseOrder());// 양수는 내림차순 정렬
Queue<Integer> minusQ = new PriorityQueue<>();
int one = 0;
int zero = 0;
// 1보다 큰 수, 1, 0, 음수 나누어 저장
for(int i=0; i<N; i++) {
int data = scan.nextInt();
if(data > 1) {
plusQ.add(data);
} else if(data == 1) {
one++;
} else if(data == 0) {
zero++;
} else {
minusQ.add(data);
}
}
int result = 0;
// 양수 처리
while(plusQ.size() > 1) {
int data1 = plusQ.poll();
int data2 = plusQ.poll();
result += data1 * data2;
}
if(!plusQ.isEmpty()) {
result += plusQ.poll();
}
// 음수 처리
while(minusQ.size() > 1) {
int data1 = minusQ.poll();
int data2 = minusQ.poll();
result += data1 * data2;
}
if(!minusQ.isEmpty()) {
if(zero == 0) {
result += minusQ.poll();
}
}
// 1 처리
result += one;
System.out.println(result);
}
}