[Algorithm] 1744 수 묶기 백준 자바

Jifrozen·2021년 9월 30일
0

Algorithm

목록 보기
54/70

파이썬으로 알고리즘 공부하다 자바로 바꿀려고 하니 정말.....(말잇못)

1. 음수인 경우

1) 홀수

-5 -3 -2 -> -5 * -3 = 15

i) 0이 있는 경우 (0추가) 15+(-2*0) =0

ii) 0 없는 경우 (1추가) 15+(-2*1)=13

2) 짝수

-5 -3 -2 -1 -> 다 곱해 = 30

2. 1인경우

무조건 더함

3. 양수인경우

1) 홀수 ( 1추가 )

5 3 2 -> 53+21

2) 짝수

5 3 -> 5*3

4.

ArrayList 내림차순

Collections.sort(plus);
Collections.reverse(plus);
또는
Collections.sort(plus,Collections.reverseOrder());

import java.util.*;

public class Main {
    public static void main(String args[]) {
        Scanner sc = new Scanner(System.in);
        int n = sc.nextInt();
        // 0 , 1 ,양수, 음수
        int zero = 0;
        int one = 0;
        ArrayList<Integer> minus = new ArrayList<>();
        ArrayList<Integer> plus = new ArrayList<>();
        for (int i = 0; i < n; i++) {
            int tmp = sc.nextInt();
            if (tmp == 0) {
                zero++;
            } else if (tmp == 1) {
                one++;
            } else if (tmp > 0) {
                plus.add(tmp);
            } else {
                minus.add(tmp);
            }
        }
        if (minus.size() % 2 == 1) {
            // -5 -3 -2인 경우 0이 있으면 -5*-3 + -2*0 -> 15 최적값
            if (zero > 0) {
                minus.add(0);
            } else {
                minus.add(1);
            }
        }

        if (plus.size() % 2 == 1) {
            plus.add(1);
        }
        Collections.sort(minus);
        Collections.sort(plus);
        Collections.reverse(plus);

        int answer = 0;

        for (int i = 0; i < minus.size(); i = i + 2) {
            answer += minus.get(i) * minus.get(i + 1);
        }
        for (int i = 0; i < plus.size(); i = i + 2) {
            answer += plus.get(i) * plus.get(i + 1);
        }
        System.out.print(answer + one);

    }
}

0개의 댓글