• Home

My Codegate

  • Home

백준 15720 카우버거 자바 문제풀이

2024/02/15 Posted by Codegate Java No Comments

문제 링크

문제 내용은 입력으로, 버거, 사이드, 음료 갯수와 가격을 받은 뒤, 모든 품목을 구입한다 했을 때 모두 단품으로 구입했을 경우의 가격과, 세트로 구입했을 경우 최소값을 출력해야 하는데, 여기서 세트는 버거, 사이트, 음료를 모두 구입하는 경우를 말하고 입력 예제를 통해 보자면

세트로 3000 + 1300 + 1000 / 2500 + 1300 + 500 이렇게 가장 큰 값으로 세트를 구성해서 할인받은 뒤 나머지를 단품 가격으로 구입해 최소 가격을 구하는 식이다

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.Arrays;
import java.util.Collections;
import java.util.Comparator;

public class Main {

  public static void main(String[] args) throws IOException {
    BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
    int[] s = Arrays.stream(br.readLine().split(" ")).mapToInt(Integer::parseInt).toArray();
    Integer[] burger = Arrays.stream(br.readLine().split(" ")).map(Integer::parseInt)
        .toArray(Integer[]::new);
    Integer[] side = Arrays.stream(br.readLine().split(" ")).map(Integer::parseInt)
        .toArray(Integer[]::new);
    Integer[] drink = Arrays.stream(br.readLine().split(" ")).map(Integer::parseInt)
        .toArray(Integer[]::new);

    int min = burger.length;
    min = Math.min(min, side.length);
    min = Math.min(min, drink.length);

    Comparator<Integer> comparator = Collections.reverseOrder();
    Arrays.sort(burger, comparator);
    Arrays.sort(side, comparator);
    Arrays.sort(drink, comparator);

    int resultBeforeDiscount = 0;
    int result = 0;
    for (int i = 0; i < min; i++) {
      int calc = 0;
      calc += burger[i];
      calc += side[i];
      calc += drink[i];
      resultBeforeDiscount += calc;
      result += (int) (calc * 0.9);
    }

    for (int i = min; i < burger.length; i++) {
      resultBeforeDiscount += burger[i];
      result += burger[i];
    }
    for (int i = min; i < side.length; i++) {
      resultBeforeDiscount += side[i];
      result += side[i];
    }
    for (int i = min; i < drink.length; i++) {
      resultBeforeDiscount += drink[i];
      result += drink[i];
    }
    System.out.println(resultBeforeDiscount);
    System.out.println(result);
  }

}

문제를 풀어보자면 버거, 사이드, 음료를 모두 배열에 담아주고, 이후 내림차순 정렬을 해준 뒤 세 배열 중 가장 짧은 배열을 기준으로 가격을 더해 세트를 만들고, 할인된 가격과, 할인받지 않는 가격을 각각 더해준 뒤 이후부터는 각 배열별로 for문을 돌리되, 가장 짧은 배열 길이를 시작으로 해서 단품을 모두 더해준 뒤 세일받지 않았을 경우의 가격과, 세일 받았을 경우의 가격을 출력해주면 끝이다

No Comments
0

Leave a Reply Cancel Reply

Introduction

My Codegate

Latest Posts

  • Google Search Console API 연동방법
  • 인텔리제이 Gradle Dependency 최신 버전 보는 방법
  • Wallet-Tracker 개발일지
  • Moralis API 자바로 호출방법
  • IntelliJ Commit 후 Push 따로 하는 방법

Categories

  • My Project (4)
  • Java (42)
  • Algorithm (161)
    • Java (152)
    • Algorithm Knowledge (3)
    • Algorithm site usage (6)
  • Vue.js (1)
  • Spring (4)
  • Docker (2)
  • IntelliJ (20)
  • Uncategorized (7)

Recent Comments

  • Codegate on Hello world!
  • A WordPress Commenter on Hello world!

© 2025 — mycodegate.com

Prev Next