문제 설명

Untitled

Untitled

문제 분석

Untitled

Untitled

슈도코드

Untitled

구현

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);
    }
}