Notice
Recent Posts
Recent Comments
Link
«   2025/07   »
1 2 3 4 5
6 7 8 9 10 11 12
13 14 15 16 17 18 19
20 21 22 23 24 25 26
27 28 29 30 31
Archives
Today
Total
관리 메뉴

전공공부

[BOJ_3343] 장미 본문

Study/Problem Solving

[BOJ_3343] 장미

monitor 2023. 12. 7. 22:27

설명


가성비가 안 좋은 것을 모두 select하고 이때, 가성비가 좋은 것을 후 순위로 선택하면서 Math.min 값을 줄여나가는 풀이로 풀어야 한다.

 

그리디 형태로 어떻게 풀까 싶었는데 도저히 떠오르지 않아서 풀이를 보고 해결했다. 조금 생각하기가 버거웠던 문제

 

 

코드


package Math;

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.StringTokenizer;

public class BOJ_3343 {
    public static void main(String[] args) throws IOException {
        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
        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());

        if (B * C < D * A) { // D/C > B/A ->  D / C * A > B -> D * A > B * C (가성비가 안 좋은 것을 선택)
            long priceTemp = B;
            B = D;
            D = priceTemp;
            long numTemp = A;
            A = C;
            C = numTemp;
        }

        long ans = Long.MAX_VALUE;

        for (int a = 0; a < C; a++) { //가성비가 안 좋은 것을 돌림 두번째 것을 안 좋은 가성비로 판단
            long b = (long) Math.ceil((double)(N - a * A)/C);
            //올림 처리 즉, 조금이라도 남으면 가성비 좋은 것 대신 갯수가 많을 수도 있는것을 산다.
            if (b < 0) {
                break;
            }
            ans = Math.min(ans, a * B + b * D);

        }
        System.out.println(ans);
    }
}

 

 

3343번: 장미

첫째 줄에 N, A, B, C, D가 주어진다. N은 1015를 넘지 않으며, A, B, C, D는 105를 넘지 않는다.

www.acmicpc.net

 

'Study > Problem Solving' 카테고리의 다른 글

[BOJ_6416] 트리인가?  (1) 2023.12.10
[BOJ_1188] 음식 평론가  (2) 2023.12.08
[BOJ_2436] 공약수  (1) 2023.12.05
[BOJ_1990] 소수인 팰린드롬  (1) 2023.12.04
[BOJ_1669] 멍멍이 쓰다듬기  (1) 2023.12.03