have a good time 2024. 7. 22. 21:50

 

입력값에서 음수랑, 양수를 따로 받는다. 

 

예를 들어 

-10 -5 -1 0 1 2 3 4 5 

 

이런식으로 입력값이 있을 때

1) 양수는 양수 리스트에 담고, 내림차순 정렬

-> 5 4 3 2 1

 

2) 음수와 0은 음수리스트에 담고, 오름차순 정렬

-10 -5 -1 0

 

그런 다음에 맨 처음에 있는 값부터 다음수와 묶으면 된다.

 

즉 양수의 경우 

-> 5 4 3 2 1

5*4 + 3*2 + 1 = 20 + 6 + 1 = 27 

이 최대의 값이 되고,

 

음수의 경우

-10 -5 -1 0

(-10) * (-5) + (-1)*0 = 50 + 0 = 50 

이 최대의 값이 된다. 

 

0을 음수 리스트에 넣은 이유는,

음수가 홀수개 있을 경우 나머지 1개는 수를 묶을 수 없어서

음수 그대로 남게 되는데, 0을 곱해서 0으로 만들면 음수를 없앨 수 있다.

 

그리고 1의 경우는,

그냥 더하는 것이 최댓값을 만들 수 있다.

즉, 1 1이 있을 경우,

수를 묶으면 1*1 = 1 밖에 안 되지만,

묶지 않으면, 1+1=2 가 된다.

 

그래서 이 경우는 예외 처리해주면 된다. 

 

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


public class Main {	
	
	public static void main(String[] args) throws IOException {
		
		BufferedReader br = new BufferedReader(new InputStreamReader(System.in));		
		StringTokenizer st = new StringTokenizer(br.readLine(), " " );
		int N = Integer.parseInt(st.nextToken());
		
		ArrayList<Integer> positive_number = new ArrayList<>();
		ArrayList<Integer> negative_number = new ArrayList<>();
		
		for(int i=0; i<N; i++) {
			st = new StringTokenizer(br.readLine(), " " );
			int number = Integer.parseInt(st.nextToken());
			
			if(number>0) {
				positive_number.add(number);
			}else {
				negative_number.add(number);
			}
		}
		
	
		// 내림차순
		Collections.sort(positive_number, Collections.reverseOrder());
		
		// 오름차순 
		Collections.sort(negative_number);
		
		
		int result = 0;		
		int i = 0;
		int size = positive_number.size();
		
		while(i<size) {
		
				if(i<size && i+1<size) {
				
					int a= positive_number.get(i);
					int b= positive_number.get(i+1);
						
					
					if(a==1||b==1) {
						result+=a;
						result+=b;
					}else {
				
						result+=a*b;
					}
					
				}else {
					int a= positive_number.get(i);
					result+=a;
				}
				i+=2;	
				
			 }
		
		
		
		i=0;
		size = negative_number.size();
		while(i<size) {
			
			if(i<size && i+1<size) {
			
				int a= negative_number.get(i);
				int b= negative_number.get(i+1);
	
				result+=a*b;
			}else {
				int a= negative_number.get(i);
				result+=a;
			}
			i+=2;
			
		 }
		
		
		System.out.println(result);
		}
}