문제링크: www.acmicpc.net/problem/1744
부호가 같고, 절댓값이 큰 수끼리 묶는 것이 결과값이 큰 것이라는 것은 쉽게 알 수 있다. 숫자 1은 어떤 수와 묶는 것보다 안묶는 것이 1 더 크다는 것과 음수가 홀수일 때, 0이 있으면 0과 곱하는 것이 결과값을 더 크게할 수 있다는 것에 유의하며 코드를 짜면 된다
import java.io.*;
import java.util.*;
public class Main {
public static void main(String[] args) throws Exception{
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
int n = Integer.parseInt(br.readLine());
long arr[] = new long[n];
boolean isZero = false;
int oneCnt = 0;
for(int i=0;i<n;i++){
arr[i] = Integer.parseInt(br.readLine());
if(arr[i]==0) isZero = true;
if(arr[i] == 1)oneCnt++;
}
ArrayList<Long> minus = new ArrayList<Long>();
ArrayList<Long> plus = new ArrayList<Long>();
for(int i=0;i<n;i++){
if(arr[i] < 0){
minus.add(arr[i]);
}else if(arr[i] > 1){
plus.add(arr[i]);
}
}
Collections.sort(minus);
Collections.sort(plus);;
Collections.reverse(plus);
long ans = 0;
for(int i=0;i<minus.size()/2*2;i=i+2){
ans += minus.get(i)*minus.get(i+1);
}
if(minus.size()%2==1){
if(isZero==false){
ans += minus.get(minus.size()-1);
}
}
for(int i=0;i<plus.size()/2*2;i=i+2){
ans+=plus.get(i)*plus.get(i+1);
}
if(plus.size()%2==1){
ans += plus.get(plus.size()-1);
}
ans += oneCnt;
System.out.println(ans);
}
}
'알고리즘 > 백준' 카테고리의 다른 글
[백준] 1976 여행가자 (0) | 2021.02.15 |
---|---|
[백준] 1963 소수 경로 (0) | 2021.02.15 |
[백준] 14226 이모티콘 [JAVA] (0) | 2021.02.15 |
[백준] 같이 눈사람 만들래? [JAVA] (0) | 2021.02.04 |
[백준] 11000 강의실 배정 [JAVA] (0) | 2021.01.28 |