코딩테스트 준비

백준 11047 동전 0 Greedy Algorithm

김T수 2021. 1. 7. 14:21

오늘부터 20200107 코딩테스트 공부한다. 구글링. .  많이 해봐야 푸는법 익히니까 구글링한다고 좌절금지 OTL

그리디 -> dp ->dfs, bfs  순서로 할 예정 . . .  dp부터 할까 . . 아니다 .. 그냥 하자.. .

그리디는 예제보고 식 세워보는게 좋은듯 . . .~ 

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

그냥 식세워서 풀어보고 코드로 바꾸는게 나은듯
어 더 정확한 풀이 할라면 sort 하고 돌려야 하지만 어차피 애초에 오름차순으로 주어지니까 굳이 안하고 해도 ㄱㅊ


#include <iostream>
using namespace std;

/*greedy는 식세우기. . . . 시발롬아! 
 문제보고 식을 세우고 생각하기
*/

int main()
{

    ios::sync_with_stdio(false);
    cin.tie(NULL);
    cout.tie(NULL);

    int n, k;
    int cnt = 0;
    int won[1001];

    cin >> n >> k;

    for (int i = 0; i < n; i++)
    {

        cin >> won[i];
    }

    for (int i = n - 1; i >= 0; i--)
    {

        //오름차순으로 들어오니까 반대로 돌려서
        if (k - won[i] >= 0)
        { 
            k = k - won[i];
            cnt++;
            i++; // 1000원 여러번 하기 이런원리
        }
    }

    cout << cnt;
}