본문 바로가기

ALGORITHM

백준 1744 수 묶기 (Java)

1. 문제 링크

 

1744번: 수 묶기

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

www.acmicpc.net

 

2. 문제 및 입출력예제

 

3. 문제 풀이

1. 큰 순으로 정렬해서 곱한다.
2. 1은 무조건 더한다.
3. 양수의 경우 조건
    3-1. 양수가 짝수일 경우, 큰 순서대로 2개씩 묶어서 더한다.
    3-2. 양수가 홀수일 경우, 큰 순서대로 2개씩 묶어서 더하고, 남은 하나는 그냥 더한다.
    3-3. 양수가 하나인 경우, 그냥 더한다.
4. 음수의 경우 조건
    4-1. 음수가 짝수일 경우, 큰 순서대로 2개씩 묶어서 큰 양수로 만들어 더한다.
    4-2. 음수가 홀수일 경우, 큰 순서대로 2개씩 묶어서 더하고, 남은 하나는 0이 없다면 더하고 0이 있으면 더하지 않는다.
    4-3. 음수가 하나인 경우, 0이 없다면 더하고 0이 있으면 더하지 않는다.

 

4. 코드

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

public class Main {
    public static void main(String[] args) throws IOException {
        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
        int N = Integer.parseInt(br.readLine());

        ArrayList<Integer> positive = new ArrayList<>();
        ArrayList<Integer> negative = new ArrayList<>();
        int temp = 0;
        int result = 0;
        boolean zero = false;
        for(int i=0;i<N;i++){
            temp = Integer.parseInt(br.readLine());
            if(temp == 1){
                result++;
            }else if(temp > 1) {
                positive.add(temp);
            }
            else if(temp < 0 ){
                negative.add(temp);
            }
            else if(temp == 0){
                zero = true;
            }
        }

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

        //양수
        if(positive.size()%2 == 0){ //짝수
            for(int i=0;i<positive.size();i+=2){
                result += positive.get(i)*positive.get(i+1);
            }
        }
        else if(positive.size() == 1){
            result += positive.get(0);
        }
        else{ //홀수
            for(int i=1;i<positive.size();i+=2){
                result += positive.get(i)*positive.get(i+1);
            }
            result += positive.get(0);
        }

        //음수
        if(negative.size()%2 == 0){ //짝수
            for(int i=0;i<negative.size();i+=2){
                result += negative.get(i)*negative.get(i+1);
            }
        }
        else if(negative.size() == 1){
            if(!zero){ //0이 없다면
                result += negative.get(0);
            }
        }
        else{ //홀수
            for(int i=0;i<negative.size();i+=2){
                result += negative.get(i)*negative.get(i+1);
            }
            if(!zero){ //0이 없다면
                result += negative.get(negative.size()-1);
            }
        }

        System.out.println(result);
    }
}

 

'ALGORITHM' 카테고리의 다른 글

백준 14226 이모티콘 (Java)  (0) 2023.09.08
백준 2448 별 찍기 - 11 (Java)  (0) 2023.09.07
백준 1726 로봇 (Java)  (0) 2023.09.05
백준 1749 점수따먹기 (Java)  (0) 2023.09.04
백준 1238 파티 (Java)  (0) 2023.09.03