예비 개발자의 노트

백준 1049번) 기타줄 본문

Baekjoon Online Judge

백준 1049번) 기타줄

judy1467 2023. 1. 15. 01:07

본문의 코드보다 더 효율적인 코드가 분명 존재합니다.

참고만 해주시면 감사하겠습니다.

코드 지적은 언제나 환영입니다.


풀이

필요한 기타줄 개수와 브랜드의 수가 첫 번째줄에 입력된다.

이후에는 각각의 브랜드의 기타줄이 세트, 낱개 가격이 입력된다.

 

기타줄을 구매하는 최소금액을 구하는 문제이다.

기타줄을 구매하는 방법에는 3가지가 존재한다.

 

1. 세트로만 구매

2. 낱개로만 구매

3. 세트와 낱개를 혼합으로 구매

 

위의 3가지의 가격 중 최소값을 구하면 되는 문제이다.

 

우선 여러 브랜드에서 세트와 낱개의 최소 금액을 찾는다.

세트, 낱개의 최소 금액을 구한 후

 

기타줄을 구매하는 3가지 방법의 금액을 계산한다.

 

마지막으로 각각의 방법 중 가장 최소값을 찾는다.

 

코드

#include "iostream"
#include "vector"
#include "algorithm"

using namespace std;

int main(){
    ios::sync_with_stdio(0);
    cin.tie(0);
    cout.tie(0);

    int n, cnt;
    cin >> n >> cnt;

    vector<int> pcs_6; // 6개짜리
    vector<int> pcs_1; // 1개짜리

    for(int i = 0 ; i < cnt ; i++){
        int tmp1, tmp2;
        cin >> tmp1 >> tmp2;
        pcs_6.push_back(tmp1);
        pcs_1.push_back(tmp2);
    }

    int min_pcs_6 = *(min_element(pcs_6.begin(), pcs_6.end()));
    int min_pcs_1 = *(min_element(pcs_1.begin(), pcs_1.end()));

    int result1 = ((n/6)+1) * min_pcs_6; // pcs_6 으로만 구매하는 경우
    int result2 = n * min_pcs_1; // pcs_1 로만 구매하는 경우
    int result3 = ((n/6) * min_pcs_6) + (min_pcs_1 * (n%6)); // pcs_6 과 pcs_1 을 섞어서 구매하는 경우

    cout << min(result1, min(result2, result3));

    return 0;
}

'Baekjoon Online Judge' 카테고리의 다른 글

백준 10773번) 제로  (0) 2023.01.16
백준 1063번) 킹  (0) 2023.01.16
백준 1026번) 보물  (0) 2023.01.15
백준 1037번) 약수  (0) 2023.01.13
백준 1015번) 수열 정렬  (0) 2023.01.09