백준

백준 11047 C++

solfa 2023. 12. 24. 02:18

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

 

생각

1. 이건 knapsack 문제다! 동전이니까 자르지 못하는 knapsack 문제

2. 근데 그렇게 어려운 고민 할 필요 없이 단순하게 금방 풀 수 있는 문제다! 알고리즘 구상하지 않고 빠르게 풀 수 있음

 

정답 코드

#include <iostream>
using namespace std;

int main(){
    int n,k;
    cin >> n >> k;
    int arr[n];
    
    for(int i=n-1 ; i>=0 ; i--){ 
    // 입력이 오름차순이니까 반복문을 거꾸로 받아서 내림차순 배열이 되게 하기
    // 밑에 반복문에서 바꾸든 sort로 재배열 하든 상관 없음! 다 똑같다
        cin >> arr[i];
    }
    
    int count = 0;
    for(int i=0; i<n ; i++){
        if(arr[i] <= k){ // 최대가치 k보다 처음으로 작은 값부터 시작해야되니까!
            count += k / arr[i]; // k / arr[i]를 하면 i번째 인덱스로 채울 수 있는 최대 횟수!가 나옴
            k = k % arr[i]; // 채우고 남은 값(가치)!
        }
    }
    cout << count << endl;
}

 

728x90

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

백준 5622 C++  (1) 2023.12.26
백준 2903번 C++  (0) 2023.12.26
백준 1342번 C++  (1) 2023.12.23
백준 10819 C++  (1) 2023.11.27
백준 1182 C++  (1) 2023.11.26