[Java] 백준 - 1026번: 보물
7월 5일(수) - 그리디 알고리즘 (1026번)
1026번: 보물
첫째 줄에 N이 주어진다. 둘째 줄에는 A에 있는 N개의 수가 순서대로 주어지고, 셋째 줄에는 B에 있는 수가 순서대로 주어진다. N은 50보다 작거나 같은 자연수이고, A와 B의 각 원소는 100보다 작거
www.acmicpc.net
ㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡ
문제점
1. C언어에서의 풀이처럼, 배열 A는 오름차순으로 정렬하고 배열 B는 내림차순으로 정렬하고자 했다
-> 오름차순 정렬은 Arrays.sort(A)로 하고
-> 내림차순 정렬은 Arrays.sort(B, Comparator.reverseOrder( ))로 진행하고자 했다
-> 하지만, 내림차순 정렬부분에서 오류가 발생
-> 오름차순 정렬을 진행하기 위해서는 primitive 타입을 사용해서 int[ ] A = new int [N]으로 선언해도 괜찮지만
-> 내림차순 정렬의 경우에는 Wrapper 클래스인 Integer를 사용하여 Integer[ ] B = new Integer[N]으로 선언해야함
ㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡ
풀이 - 1
(배열 A는 오름차순으로 정렬 / 배열 B는 내림차순으로 정렬하는 방법)
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.Comparator;
import java.util.StringTokenizer;
import java.util.Arrays;
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());
int[] A = new int[N];
Integer[] B = new Integer[N];
StringTokenizer st = new StringTokenizer(br.readLine(), " ");
for(int i=0; i<N; i++)
{
A[i] = Integer.parseInt(st.nextToken());
}
Arrays.sort(A);
st = new StringTokenizer(br.readLine(), " ");
for(int i=0; i<N; i++)
{
B[i] = Integer.parseInt(st.nextToken());
}
Arrays.sort(B, Comparator.reverseOrder());
int result=0;
for(int i=0; i<N; i++)
{
result = result + (A[i] * B[i]);
}
System.out.print(result);
}
}
ㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡ
풀이 - 2
(풀이 - 1에서 배열 B의 내림차순 정렬이 귀찮기 때문에, A와 B 모두 오름차순으로 정렬하는 방법)
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.StringTokenizer;
import java.util.Arrays;
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());
int[] A = new int[N];
int[] B = new int[N];
StringTokenizer st = new StringTokenizer(br.readLine(), " ");
for(int i=0; i<N; i++)
{
A[i] = Integer.parseInt(st.nextToken());
}
Arrays.sort(A);
st = new StringTokenizer(br.readLine(), " ");
for(int i=0; i<N; i++)
{
B[i] = Integer.parseInt(st.nextToken());
}
Arrays.sort(B);
int result=0;
for(int i=0; i<N; i++)
{
result = result + (A[i] * B[N-1-i]);
}
System.out.print(result);
}
}
ㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡ