매일 Algorithm

신재원·2023년 3월 24일
0

Algorithm

목록 보기
75/243

백준 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);
    }
}

0개의 댓글