코테 공부

수열의 점수(백준 2036번), 자바(ArrayList 정렬하기)

DaEun_ 2022. 7. 12. 16:19

 

2036번: 수열의 점수 (acmicpc.net)

 

2036번: 수열의 점수

n개의 정수로 이루어진 수열이 있다. 이 수열에서 한 정수를 제거하거나, 또는 두 정수를 제거할 수 있다. 한 정수를 제거하는 경우에는 그 정수가 점수가 되고, 두 정수를 제거하는 경우에는 두

www.acmicpc.net

 

고려해야하는 경우

1. 0이 있는 경우, 음수와 곱하여 0으로 만들 수 있음

2. 3,1 의 경우, 둘을 곱해서 더하는 것이 아니라 하나씩 따로 더해야 더 큰 수가 나옴

 

import java.util.*;

public class Main {
	
	static long answer=0;
	static int zero=0;
	
	public static void main(String[] args) {
		int n;
		
		Scanner sc=new Scanner(System.in);
		n=sc.nextInt();
		
		ArrayList<Long> arr1=new ArrayList<Long>();
		ArrayList<Long> arr2=new ArrayList<Long>();
		zero=0;
		
		for(int i=0;i<n;i++) {
			
			long num=sc.nextInt();
			
			if(num<0) arr1.add(num);
			else if(num>0) arr2.add(num);
			else zero++;
		}
		
		Collections.sort(arr1);
		Collections.sort(arr2,Comparator.reverseOrder());
		
		if(arr1.size()>0) getArr1(arr1);
		if(arr2.size()>0) getArr2(arr2);
		
		System.out.println(answer);
	}
	
	//음수
	static void getArr1(ArrayList<Long> arr){
		
		for(int i=0;i<arr.size();i+=2) {
			if((arr.size()-i)==1) {
				if(zero>0) zero--;
				else answer+=arr.get(i);
			}
			else answer+=(arr.get(i)*arr.get(i+1));
		}
		
	}
	
	//양수
	static void getArr2(ArrayList<Long> arr){
		
		for(int i=0;i<arr.size();i+=2) {
			if((arr.size()-i)==1)answer+=arr.get(i);
			else {
				if(arr.get(i)==1 || arr.get(i+1)==1)
					answer+=(arr.get(i)+arr.get(i+1));
				else answer+=(arr.get(i)*arr.get(i+1));
			}
		}
		
	}
	
}

 

 

 

<ArrayList 정렬>

import java.util.*;

public class Main {
	
	public static void main(String[] args) {
		int n;
		
		Scanner sc=new Scanner(System.in);
		n=sc.nextInt();
		
		ArrayList<Long> arr1=new ArrayList<Long>();
	
		
		for(int i=0;i<n;i++) {
			
			long num=sc.nextInt();
			
			arr1.add(num);
		}
		
		//오름차순
		Collections.sort(arr1);
        
        
		//내림차순
		Collections.sort(arr1,Comparator.reverseOrder());
        
        
		
		//사용자 정의 정렬(오름 차순)
		arr1.sort(new Comparator<Long>() {

			@Override
			public int compare(Long o1, Long o2) {
				// TODO Auto-generated method stub
				if(o1<o2)
				return -1;
				else return 1;
			}
			
		});
		
        
	//사용자 정의 정렬(내림차순)
	Collections.sort(arr1, new Comparator<Long>() {

			@Override
			public int compare(Long o1, Long o2) {
				// TODO Auto-generated method stub
				if(o1>o2) return -1;
				else return -1;
			}
			
		});

	for(int i=0;i<n;i++)System.out.print(arr1.get(i)+" ");
	
		
	}
	
}