코딩테스트/Baekjoon

[백준 #11047] 동전 0 (C++)

동띵 2022. 3. 16. 12:10

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를 입력하고

for 문을 사용해 N가지의 동전 값을 입력받아

K보다 작은 것들만 벡터에 넣어주었다.

(K보다 큰 동전 값은 필요가 없기 때문이다.)

 

그리고 큰 동전 값부터 나누기 위해 reverse를 사용하여 벡터를 내림차순으로 정렬시켰다.

(동전 값을 오름차순으로 입력했기 때문)

 

그다음 for 문을 사용해 N이 1일 때는 (동전 종류가 1가지 일 때)

K를 vec[0]로 나눈 몫을 cnt에 넣은 후 break로 for 문을 나가고,

아닐 시에는 K가 동전 값으로 나눠진다면 그 몫을 cnt에 더해주고

K는 나머지 값이 되게 하였다.

 

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

int main() {
    ios::sync_with_stdio(false);
    cin.tie(NULL);

    int N, K, num;
    int cnt = 0;
    vector <int> vec;

    cin >> N >> K;

    for (int i = 0; i < N; i++) {
        cin >> num;
        if (num <= K)
        vec.push_back(num);
    }

    reverse(vec.begin(), vec.end());

    for (int i = 0; i < vec.size(); i++) {
        if (N == 1) {
            cnt = K / vec[0];
            break;
        } else {
            if (K / vec[i] > 0) {
                cnt += K / vec[i];
                K %= vec[i];
            } else continue;
        }
    }
    cout << cnt;
    return 0;
}

'코딩테스트 > Baekjoon' 카테고리의 다른 글

[백준 #16953] A → B (C++)  (0) 2022.03.19
[백준 #10610] 30 (C++)  (0) 2022.03.19
[백준 #1158] 요세푸스 문제 (C++)  (0) 2022.02.15
[백준 #10825] 국영수 (C++)  (0) 2022.02.11
[백준 #10816] 숫자 카드 2 (C++)  (0) 2022.02.11