Notice
Recent Posts
Recent Comments
Link
«   2024/09   »
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
Tags
more
Archives
Today
Total
관리 메뉴

Ruff! Ruff!

#[C++]11047 - 동전 0 본문

백준

#[C++]11047 - 동전 0

maeng-kim 2024. 2. 8. 19:01

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

 

11047번: 동전 0

첫째 줄에 N과 K가 주어진다. (1 ≤ N ≤ 10, 1 ≤ K ≤ 100,000,000) 둘째 줄부터 N개의 줄에 동전의 가치 Ai가 오름차순으로 주어진다. (1 ≤ Ai ≤ 1,000,000, A1 = 1, i ≥ 2인 경우에 Ai는 Ai-1의 배수)

www.acmicpc.net


문제

준규가 가지고 있는 동전은 총 N종류이고, 각각의 동전을 매우 많이 가지고 있다.

동전을 적절히 사용해서 그 가치의 합을 K로 만들려고 한다. 이때 필요한 동전 개수의 최솟값을 구하는 프로그램을 작성하시오.

입력

첫째 줄에 N과 K가 주어진다. (1 ≤ N ≤ 10, 1 ≤ K ≤ 100,000,000)

둘째 줄부터 N개의 줄에 동전의 가치 Ai가 오름차순으로 주어진다. (1 ≤ Ai ≤ 1,000,000, A1 = 1, i ≥ 2인 경우에 Ai는 Ai-1의 배수)

출력

첫째 줄에 K원을 만드는데 필요한 동전 개수의 최솟값을 출력한다.


코드

using namespace std;
#include <iostream>
#include <vector>

int main()
{
    int n, k;
    cin >> n >> k;
    
    int cnt=0;
    vector<int> A;
    
    for(int j=0; j<n; j++) {
        int tmp;
        cin >> tmp;
        A.push_back(tmp);
    }
    
    for (int i =n-1; i>=0; i--) {
        if(A[i] <= k) {
            int z=0;
            z= k/A[i];
            cnt += z;
            k = k-z*A[i];
        }
    }


    cout << cnt << "\n";
    return 0;
}

 

 

 

그리디 알고리즘 너무 어렵다.

가장 효율적으로 최적 해를 찾아야함..

어려워요

 


using namespace std;
#include <iostream>
#include <vector>

int main()
{
    int n, k;
    cin >> n >> k;
    
    int cnt=0;
    vector<int> A;
    
    for(int j=0; j<n; ++j) {
        cin >> A[j];
    }
    
    int i=0;
    
    while(k != 0 && i<n) {
       // cout << "i : "<< i << " ";
        if(A[i] <= k && A[i+1] > k) {
            int z =0;
            z = k/A[i];
            cnt += z;
            k -= A[i]*z;
           // cout << "K is " << k << "\n";
           // cout << cnt << " ";
            i =0;
            continue;
        }
        i++;
    }

    cout << cnt << "\n";
    return 0;
}

이건 제일 처음에 짠 코드

그리디알고리즘을 사용하지도 않았고

엄청 비효율적이긴 하지만 출력값이 잘 나오긴 한다.

근데 백준에서는 틀렸다고 뜸.. 왜..??

'백준' 카테고리의 다른 글

#[C++]4344 - 평균은 넘겠지  (0) 2024.02.12
#[C++]2309 - 일곱 난쟁이  (0) 2024.02.12
#[C++]11656 - 접미사 배열  (1) 2024.02.08
#[C++]1065 - 한수  (0) 2024.02.08
#[C++]1316 - 그룹 단어 체커  (0) 2024.02.08