티스토리 뷰

문제

https://www.acmicpc.net/problem/1049

 

1049번: 기타줄

첫째 줄에 N과 M이 주어진다. N은 100보다 작거나 같은 자연수이고, M은 50보다 작거나 같은 자연수이다. 둘째 줄부터 M개의 줄에는 각 브랜드의 패키지 가격과 낱개의 가격이 공백으로 구분하여 주

www.acmicpc.net

언어

자바 Java

로직

가격 저장

6개 묶음의 가격과 낱개 가격을 저장합니다. 브랜드별로 저장할 필요 없이 최저 값만 저장하면 됩니다.

int bundle = Integer.MAX_VALUE;
int piece = Integer.MAX_VALUE;

for (int i = 0; i < m; i++) {
    input = br.readLine().split(" ");
    int a = Integer.parseInt(input[0]);
    int b = Integer.parseInt(input[1]);
    bundle = bundle > a ? a : bundle;
    piece = piece > b ? b : piece;
}

계산

구매해야 하는 수량이 6개 이상일 때와 아닐 때를 구분하여 계산합니다. 

묶음 가격과 낱개 가격을 비교하여 더 적은 값이 드는 값을 sum에 저장하고 남은 개수 n에서 구매 개수만큼 빼주면 됩니다. 

int sum = 0;
while (n > 0) {
    if (n < 6) {
        if (bundle > piece * n) {
            sum += piece * n;
        } else {
            sum += bundle;
        }
        break;
    } else {
        if (bundle > piece * 6) {
            sum += piece * 6;
        } else {
            sum += bundle;
        }
        n -= 6;
    }
}

최종 코드

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

public class Main {
    public static void main(String[] args) throws IOException {

        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));

        String[] input = br.readLine().split(" ");
        int n = Integer.parseInt(input[0]);
        int m = Integer.parseInt(input[1]);

        int bundle = Integer.MAX_VALUE;
        int piece = Integer.MAX_VALUE;

        for (int i = 0; i < m; i++) {
            input = br.readLine().split(" ");
            int a = Integer.parseInt(input[0]);
            int b = Integer.parseInt(input[1]);
            bundle = bundle > a ? a : bundle;
            piece = piece > b ? b : piece;
        }

        int sum = 0;
        while (n > 0) {
            if (n < 6) {
                if (bundle > piece * n) {
                    sum += piece * n;
                } else {
                    sum += bundle;
                }
                break;
            } else {
                if (bundle > piece * 6) {
                    sum += piece * 6;
                } else {
                    sum += bundle;
                }
                n -= 6;
            }
        }

        System.out.println(sum);
    }
}
Total
Today
Yesterday
최근에 올라온 글
«   2024/11   »
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