본문 바로가기
Algorithm

[백준 Gold 4] 1744 수 묶기 -Java

by Ray 2021. 12. 23.

문제링크 : https://www.acmicpc.net/problem/1744

 

1744번: 수 묶기

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

www.acmicpc.net

 

접근 과정 : 

  • 음수인 경우, 0과 1, 1보다 큰 수로 나누어서 접근했다.
  • 음수 : 가장 작은 음수부터 2개씩 묶어서 곱함
  • 음수의 개수가 홀수이고 0이 존재하면 해당 음수는 없어짐 / 만약에 0이 없으면 해당 음수를 더함
  • 1 : 1의 개수만큼 더함
  • 1보다 큰수 : 가장 큰 수부터 2개씩 묶어서 곱하고, 홀수면 남은 숫자는 더함 

 

소스 코드 및 결과 :

package BOJ;

import java.io.*;
import java.util.*;

/* 
    수 묶기
*/
public class BOJ1744 {

    public static void main(String[] args) throws NumberFormatException, IOException {

        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
        int N = Integer.parseInt(br.readLine());

        List<Integer> negative = new ArrayList<>();
        int[] zeroAndOne = new int[2];
        List<Integer> positive = new ArrayList<>();

        for (int i = 0; i < N; i++) {
            int x = Integer.parseInt(br.readLine());

            if (x < 0) {
                negative.add(x);
            } else if (x > 1) {
                positive.add(x);
            } else {
                zeroAndOne[x]++;
            }
        }

        Collections.sort(negative);
        Collections.sort(positive, Collections.reverseOrder());

        long sum = 0;

        if (negative.size() > 1) {
            for (int i = 0; i <negative.size()-1; i+=2) {
                sum += (negative.get(i) * negative.get(i + 1));
            }
        }

        if (negative.size() % 2 == 1 && zeroAndOne[0] == 0) {
            sum += negative.get(negative.size() - 1);
        }

        if (positive.size() > 1) {
            for (int i = 0; i < positive.size()-1; i+=2) {
                System.out.println(positive.get(i)+ " "+positive.get(i+1));
                sum += (positive.get(i) * positive.get(i + 1));
            }
        }

        if (positive.size() % 2 == 1) {
            sum += positive.get(positive.size() - 1);
        }

        sum += zeroAndOne[1];

        System.out.println(sum);

    }
}

 

P.S

단순하게 조건 분기로 풀이가 가능한 문제이다.

근데.. 쉽다고 생각하고 실수가 많았다...

쉬워보여도 좀 더 집중해야 할듯