백준 18310번 (그리디)
import java.util.Arrays;
import java.util.Scanner;
public class problem233 {
public static void main(String[] args) {
Scanner in = new Scanner(System.in);
int size = in.nextInt();
int[] arr = new int[size];
for (int i = 0; i < size; i++) {
arr[i] = in.nextInt();
}
Arrays.sort(arr);
// 배열 중앙값 구하기
if (size % 2 == 0) {
System.out.println(arr[size / 2 - 1]);
} else {
System.out.println(arr[size / 2]);
}
}
}
백준 13975번 (그리디)
import java.util.PriorityQueue;
import java.util.Scanner;
public class problem234 {
public static void main(String[] args) {
Scanner in = new Scanner(System.in);
// 40 30 30 50이 입력되었을경우
int t = in.nextInt();
StringBuilder sb = new StringBuilder();
for (int i = 0; i < t; i++) {
int n = in.nextInt();
// 우선순위 큐 선언, 정렬을 위해
PriorityQueue<Long> pq = new PriorityQueue<>();
for (int j = 0; j < n; j++) {
String st = in.next();
pq.add(Long.parseLong(st));
}
long sum = 0;
while (pq.size() > 1) {
// 값을 꺼냄
// 30 + 30 - > 40 50 60 -> 90 + 60
long a = pq.poll();
long b = pq.poll();
sum += a + b;
// 우선순위 큐에 값을 담아준다 (오름차순 정렬도 됨)
pq.add(a + b);
}
sb.append(sum).append("\n");
}
System.out.println(sb.toString());
}
}
백준 20044번 (그리디)
import java.util.Arrays;
import java.util.Scanner;
public class problem235 {
public static void main(String[] args) {
Scanner in = new Scanner(System.in);
int t = in.nextInt();
int[] arr = new int[t * 2];
for (int i = 0; i < arr.length; i++) {
arr[i] = in.nextInt();
}
Arrays.sort(arr);
int min = Integer.MAX_VALUE;
for (int j = 0; j < arr.length; j++) {
// 배열의 앞뒤로 더해준다.
int sum = arr[j] + arr[t * 2 - 1 - j];
if (sum < min) {
min = sum;
}
}
System.out.println(min);
}
}
백준 15720번 (그리디)
import java.util.Arrays;
import java.util.Collections;
import java.util.Scanner;
public class problem236 {
public static void main(String[] args) {
Scanner in = new Scanner(System.in);
int a = in.nextInt(); // 버거의 갯수
int b = in.nextInt(); // 사이드 메뉴 갯수
int c = in.nextInt(); // 음료의 갯수
Integer[] aArr = new Integer[a];
Integer[] bArr = new Integer[b];
Integer[] cArr = new Integer[c];
for (int i = 0; i < a; i++) {
aArr[i] = in.nextInt();
}
for (int i = 0; i < b; i++) {
bArr[i] = in.nextInt();
}
for (int i = 0; i < c; i++) {
cArr[i] = in.nextInt();
}
// 내림차순 정렬
Arrays.sort(aArr, Collections.reverseOrder());
Arrays.sort(bArr, Collections.reverseOrder());
Arrays.sort(cArr, Collections.reverseOrder());
// 세트 할인이 적용되기 전
int normalTotal = 0;
for (int i : aArr) {
normalTotal += i;
}
for (int i : bArr) {
normalTotal += i;
}
for (int i : cArr) {
normalTotal += i;
}
System.out.println(normalTotal);
int saleTotal = 0;
// 세트가 되는 경우만 체크
int size = Math.min(aArr.length, Math.min(bArr.length, cArr.length));
// 할인적용
for (int i = 0; i < size; i++) {
saleTotal += aArr[i] * 0.9;
saleTotal += bArr[i] * 0.9;
saleTotal += cArr[i] * 0.9;
}
// 나머지는 정상가
for (int j = size; j < aArr.length; j++) {
saleTotal += aArr[j];
}
for (int j = size; j < bArr.length; j++) {
saleTotal += bArr[j];
}
for (int j = size; j < cArr.length; j++) {
saleTotal += cArr[j];
}
System.out.println(saleTotal);
}
}