티스토리 뷰

본 글은 다크모드에 최적화되어 있습니다.

학기 중에는 해설 로직을 포함하지 않습니다.

문제

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

 

1744번: 수 묶기

길이가 N인 수열이 주어졌을 때, 그 수열의 합을 구하려고 한다. 하지만, 그냥 그 수열의 합을 모두 더해서 구하는 것이 아니라, 수열의 두 수를 묶으려고 한다. 어떤 수를 묶으려고 할 때, 위치에

www.acmicpc.net

언어

자바 Java

코드

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.ArrayList;
import java.util.Collections;
import java.util.Comparator;
import java.util.List;

public class Main {
    private static List<Integer> positiveNumbers = new ArrayList<>();
    private static List<Integer> negativeNumbers = new ArrayList<>();

    public static void main(String[] args) throws IOException {
        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));

        int n = Integer.parseInt(br.readLine());
        for (int i = 0; i < n; i++) {
            int num = Integer.parseInt(br.readLine());
            if (num >= 1)
                positiveNumbers.add(num);
            else
                negativeNumbers.add(num);
        }

        // 양수를 갖는 list는 내림차순 정렬
        Collections.sort(positiveNumbers, Comparator.reverseOrder());
        // 음수 갖는 list는 오름차순 정렬
        Collections.sort(negativeNumbers);

        long sum = 0L;
        while (positiveNumbers.size() >= 2) {
            int num1 = positiveNumbers.remove(0);
            int num2 = positiveNumbers.remove(0);
            sum += calculatePositiveNum(num1, num2);
        }
        if (!positiveNumbers.isEmpty())
            sum += calculatePositiveNum(positiveNumbers.get(0));

        while (negativeNumbers.size() >= 2) {
            int num1 = negativeNumbers.remove(0);
            int num2 = negativeNumbers.remove(0);
            sum += calculateNegativeNum(num1, num2);
        }
        if (!negativeNumbers.isEmpty())
            sum += calculateNegativeNum(negativeNumbers.get(0));

        System.out.println(sum);
    }

    // 양수인 경우
    private static int calculatePositiveNum(int... args) {
        if (args.length >= 2) {
            if (args[0] == 1 || args[1] == 1) {
                return args[0] + args[1];
            } else
                return args[0] * args[1];
        } else {
            return args[0];
        }
    }

    // 음수인 경우
    private static int calculateNegativeNum(int... args) {
        if (args.length >= 2) {
            if (args[0] < 0 && args[1] < 0)
                return args[0] * args[1];
            else
                return 0;
        } else {
            return args[0];
        }
    }
}

 

 

Total
Today
Yesterday
최근에 올라온 글
«   2024/11   »
1 2
3 4 5 6 7 8 9
10 11 12 13 14 15 16
17 18 19 20 21 22 23
24 25 26 27 28 29 30