끄적끄적 코딩
article thumbnail
Published 2023. 7. 22. 17:34
[Java] 백준 3343번 장미 알고리즘

N개의 장미를 가장 싸게 구매할 수 있는 금액을 구하는 문제입니다.

가성비가 좋은 장미와 가성비가 좋지 못한 장미로 나눕니다.
이를 X와 Y로 볼 경우 Y는 X개 보다 적은 경우에만 정답이 나올 수 있습니다.

그래서 Y를 0개부터 X-1개 까지 구매하는 경우의 수를 전부 확인하여 결과값을 찾아냈습니다.

import java.io.*;
import java.util.*;

public class Main {
  public static void main(String[] args) throws Exception {
    BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
    BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(System.out));
    StringTokenizer st = new StringTokenizer(br.readLine());

    long n = Long.parseLong(st.nextToken());
    long a = Long.parseLong(st.nextToken());
    long b = Long.parseLong(st.nextToken());
    long c = Long.parseLong(st.nextToken());
    long d = Long.parseLong(st.nextToken());
    long result = Long.MAX_VALUE;

    if (b * c < d * a) {
      long temp;
      temp = a;
      a = c;
      c = temp;
      temp = b;
      b = d;
      d = temp;
    }

    for (int i = 0; i < c; ++i) {
      long index = (long) Math.ceil((double) (n - i * a) / c);

      if (index < 0) {
        index = 0;
      }
      result = Math.min(result, i * b + index * d);

      if (index == 0) {
        break;
      }
    }

    bw.write(result + "\n");
    bw.close();
  }
}

검색 태그