-
1744 수 묶기백준/그리디 알고리즘 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); } }
'백준 > 그리디 알고리즘' 카테고리의 다른 글
1781 컵라면 (0) 2024.07.05 12904 A와 B (0) 2022.05.02 2872 우리집엔 도서관이 있어 (0) 2022.05.02 2839 설탕 배달 (0) 2022.03.10 2437 저울(자바) (0) 2022.02.19