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 |