Computer Science
탄탄한 기반 실력을 위한
전공과 이론 지식 모음
Today I Learned!
배웠으면 기록을 해야지
TIL 사진
Flutter 사진
Flutter로 모바일까지
거꾸로캠퍼스 코딩랩 Flutter 앱개발 강사
스파르타코딩클럽 즉문즉답 튜터
카카오테크캠퍼스 3기 학습코치
프로필 사진
박성민
임베디드 세계에
발을 들인 박치기 공룡
임베디드 사진
EMBEDDED SYSTEM
임베디드 SW와 HW, 이론부터 실전까지
ALGORITHM
알고리즘 해결 전략 기록
🎓
CAU 소프트웨어학부
텔레칩스 차량용 임베디드 스쿨 3기
애플 개발자 아카데미 1기
깃허브 사진
GitHub
프로젝트 모아보기
Instagram
인스타그램 사진

Develop/알고리즘

[백준] 11047 - 동전 0

sm_amoled 2021. 12. 26. 13:07

문제링크

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

문제

준규가 가지고 있는 동전은 총 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원을 만드는데 필요한 동전 개수의 최솟값을 출력한다.

조건

  • 시간 제한 : 1s
  • 메모리 제한 : 256MB

해설

입력받는 동전의 값들 중 가장 큰 값부터 차례대로 주어진 총 금액에서 최대한 많이 활용하면 필요한 동전의 개수를 줄일 수 있다.

풀이

우선 값들을 입력받는다. 값이 오름차순으로 주어지기 때문에, 뒤에서부터 값을 채워서 내림차순으로 값을 벡터에 저장해준다.

int N, K;
cin >> N >> K;

vector<int> value(N);
for(int i = 1; i <= N; i++) {
    cin >> value[N-i];
}

coinCount에는 필요한 동전의 개수를 저장한다. for 반복문을 돌리면서 주어진 동전 중 가장 큰 값부터 가장 작은 값까지 현재 남은 총 금액(K)과 비교하면서 같거나 크면 coinCount에 1을 더하고, K의 값에서 해당 동전의 값만큼 빼주고 이 동전을 다시 한 번 비교해준다 (i에 1을 빼서 한 번 더 조건문 돌리기) 반복문을 모두 돌려주면 coinCount에 최소값이 들어있으므로, 이 값을 출력해주면 원하는 결과를 얻을 수 있다.

int coinCount = 0;
for(int i = 0; i < N; i++) {
    if(K >= value[i]) {
        K -= value[i];
        coinCount++;
        i--;
    }
}

cout << coinCount;

코멘트

EG


코드

#include <iostream>
#include <vector>

using namespace std;

int main() {
    int N, K;
    cin >> N >> K;
    
    vector<int> value(N);
    for(int i = 1; i <= N; i++) {
        cin >> value[N-i];
    }
    
    int coinCount = 0;
    for(int i = 0; i < N; i++) {
        if(K >= value[i]) {
            K -= value[i];
            coinCount++;
            i--;
        }
    }
    
    cout << coinCount;
    
	return 0;
}

320x100

'Develop > 알고리즘' 카테고리의 다른 글

[백준] 7579 - 앱  (0) 2021.12.26
[백준] 13305 - 주유소  (0) 2021.12.26
[백준] 2294 - 동전 2  (0) 2021.12.26
[백준] 2609 - 최대공약수와 최소공배수  (0) 2021.12.26
[백준] 1011 - Fly me to the Alpha Centauri  (0) 2021.12.26