일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | 6 | 7 |
8 | 9 | 10 | 11 | 12 | 13 | 14 |
15 | 16 | 17 | 18 | 19 | 20 | 21 |
22 | 23 | 24 | 25 | 26 | 27 | 28 |
29 | 30 |
- 기초
- 유니티
- 개인 프로젝트 - 런앤건
- 10월
- 2월
- 4월
- 2025년
- 입문
- 자료 구조
- 2023년
- C/C++
- 3월
- 다이나믹 프로그래밍
- 게임 엔진 공부
- 6월
- 프로그래머스
- 백준
- 코딩 기초 트레이닝
- c++
- 2022년
- 코딩 테스트
- 1월
- 유니티 심화과정
- 골드메탈
- 2024년
- 수학
- 단계별로 풀어보기
- todolist
- 개인 프로젝트
- 5월
- Today
- Total
기록 보관소
[Baekjoon/백준] 11047번: 동전 0(C/C++) 본문
단계별로 풀어보기 16단계(그리디 알고리즘) 1번 문제
https://www.acmicpc.net/step/33
그리디 알고리즘 단계
동전의 조건이 특별해서 동적 프로그래밍보다 빠르게 답을 찾을 수 있는 문제
www.acmicpc.net
백준 11047번: 동전 0
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로 만들려고 한다. 이때 필요한 동전 개수의 최솟값을 구하는 프로그램을 작성하시오.
입력과 출력
입력: 첫째 줄에 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원을 만드는데 필요한 동전 개수의 최솟값을 출력한다.
접근 방법
이번 문제는 동전의 종류 N과 동전의 목표 가치 합 K를 입력받고 N개 줄의 가치를 입력받아서, 가치 합이 K가 되는 최소 동전 개수를 출력하는 문제다. 입력받는 가치 값들은 오름차순으로 주어져서 마지막에 입력될수록 큰 값이다.
일단 예제 입력에서 보이듯, 가치가 K보다 훨씬 큰 경우가 있을 수 있다. 이런 경우는 더할 이유가 없으니 모두 빼고 생각해야한다. 그렇게되면 K보다 작은 값들만 남게 되는데 K를 만드는데 필요한 동전의 최솟값을 구해야하므로, 오름차순으로 주어진 값 중 가장 마지막에 입력된 값(배열로 따지면 가장 높은 인덱스)을 K에 빼면된다. 이를 K가 0이 될때까지 반복문을 통해서 반복하면 된다. 그렇게되면 자연스럽게 K 보다 작은 값들 중 가장 큰 값이 먼저 빠지고, 이후 남는 값에 맞춰서 범위 내의 큰 값을 빼게 되어 문제를 해결할 수 있다.
코드
#include <stdio.h>
#define MAX 11
int A[MAX];
int main(int argc, char *argv[]) {
int N, K, index, count = 0;
scanf("%d %d", &N, &K);
for (int i = 0; i < N; i++)
scanf("%d", &A[i]);
index = N - 1;
while (K > 0) {
if (A[index] > K)
index--;
else {
K = K - A[index];
count++;
}
}
printf("%d\n", count);
return 0;
}
결과
'코딩 테스트 > 백준' 카테고리의 다른 글
[Baekjoon/백준] 11399번: ATM(C/C++) (0) | 2022.03.11 |
---|---|
[Baekjoon/백준] 1931번: 회의실 배정(C/C++) (0) | 2022.03.09 |
[Baekjoon/백준] 12865번: 평범한 배낭(C/C++) (0) | 2022.03.06 |
[Baekjoon/백준] 1912번: 연속합(C/C++) (0) | 2022.03.05 |
[Baekjoon/백준] 9251번: LCS(C/C++) (0) | 2022.03.04 |