ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • 백준 - 동전 2 (2294) [C++]
    문제 풀이/백준 2023. 8. 15. 00:42
    반응형

     이 문제는 dp를 이용해서 푸는 문제이다. dp 배열을 해당 금액을 만들 수 있는 최소의 코인 개수로 설정하면 쉽게 풀 수 있는 문제이다. 시간 제한이 1초이므로, 1억번의 연산만으로 끝내야 한다. for 문마다 최대 100번의 루프가 돌아야 하므로, 탐색할 수 있는 금액의 최대 한도는 1,000,000원이다. 따라서 MAX를 백만으로 설정해서 문제를 풀었다.

     

     

     

     

    #include <iostream>
    #include <vector>
    
    using namespace std;
    
    #define MAX 1000000
    
    int dp[MAX + 1];
    
    void init() {
    	for (int i = 0; i < MAX + 1; i++) {
    		dp[i] = MAX;
    	}
    }
    
    int main() {
    	int n, k;
    	vector<int> coin;
    	cin >> n >> k;
    
    	init();
    
    	for (int i = 0; i < n; i++) {
    		int temp;
    		cin >> temp;
    		coin.push_back(temp);
    		dp[temp] = 1;
    	}
    
    	for (int i = 1; i < MAX + 1; i++) {
    		for (int c : coin) {
    			int prev = i - c;
    			if (prev <= 0) {
    				continue;
    			}
    			dp[i] = min(dp[prev] + 1, dp[i]);
    		}
    	}
    
    	if (dp[k] == MAX) {
    		cout << -1 << '\n';
    
    		return 0;
    	}
    	cout << dp[k] << '\n';
    
    	return 0;
    }
    반응형

    '문제 풀이 > 백준' 카테고리의 다른 글

    백준 - 택배 배송 (5972) [C++]  (0) 2023.08.16
    백준 - 동전 1 (2293) [C++]  (0) 2023.08.15
    백준 - 20058 [C++]  (0) 2023.08.05
    백준 - 17825 [C++]  (0) 2023.07.31
    백준 - 15591 [C++]  (0) 2023.07.29
Designed by Tistory.