RiseOJ는 solved.ac와 제휴 관계가 없습니다. 티어 아이콘 © solved.ac. solved.ac
포럼
R01505

영수증 거스름돈 동전 최소화

Bronze III 브론즈 III
난이도
2s
시간 제한
256MB
메모리 제한
0
맞았습니다!!
0
제출 수
0.0%
정답률
레이팅

의견: 0

설명

무인 매점의 키오스크가 손님에게 거스름돈을 내어 줄 때, 사용하는 동전의 개수를 최소로 하려고 한다.

키오스크가 보유한 동전의 액면(금액)은 큰 것부터 작은 것 순서로 주어지며, 각 액면은 바로 다음(한 단계 작은) 액면의 배수이다. 즉 액면들이 서로 배수 관계로 겹겹이 포함되어 있다. 각 액면의 동전은 필요한 만큼 얼마든지 쓸 수 있으며, 거스름돈 \(M\) 은 항상 가장 작은 액면의 배수이므로 정확히 거슬러 줄 수 있다.

거스름돈 \(M\) 원을 정확히 만들기 위해 필요한 동전의 최소 개수를 구하여라.

예를 들어 액면이 \(500, 100, 50, 10\) 이고 거스름돈이 \(1260\) 원이라면, \(500\) 원 두 개, \(100\) 원 두 개, \(50\) 원 한 개, \(10\) 원 한 개로 모두 \(6\) 개의 동전이 필요하다.

제약

\(0 \le M \le 10^9\)

\(1 \le K \le 30\)

액면은 큰 것부터 작은 것 순서이며, 각 액면은 다음 액면의 배수이다. 모든 액면은 \(1\) 이상 \(10^9\) 이하이고, \(M\) 은 가장 작은 액면의 배수이다.

입력 형식

첫째 줄에 거스름돈 \(M\) 과 동전 액면의 개수 \(K\) 가 공백을 사이에 두고 주어진다. (\(0 \le M \le 10^9\), \(1 \le K \le 30\))

둘째 줄에 \(K\) 개의 액면이 큰 것부터 작은 것 순서로 공백으로 구분되어 주어진다. 각 액면은 바로 다음 액면의 배수이다. 모든 액면은 \(1\) 이상 \(10^9\) 이하의 서로 다른 정수이며, \(M\) 은 항상 가장 작은 액면의 배수이다.

출력 형식

거스름돈 \(M\) 을 정확히 만들기 위해 필요한 동전의 최소 개수를 출력한다.

예제 1
입력
1260 4
500 100 50 10
출력
6
설명

거스름돈 1260원. 큰 동전부터 탐욕적으로 나눈다.
500원 × 2 = 1000 (남은 260)
100원 × 2 = 200 (남은 60)
50원 × 1 = 50 (남은 10)
10원 × 1 = 10 (남은 0)
총 2+2+1+1 = 6개.

예제 2
입력
13 4
8 4 2 1
출력
3
설명

거스름돈 13. 8×1=8(남은 5), 4×1=4(남은 1), 2×0, 1×1=1. 총 1+1+0+1 = 3개.

예제 3
입력
0 3
10 5 1
출력
0
설명

거스름돈이 0원이면 동전을 한 개도 줄 필요가 없다.

문제 정보

riseoj 작성

출처 Original

평가 및 의견

영수증 거스름돈 동전 최소화

개요
출제자 난이도 Bronze III 브론즈 III 의견 0 / 50 공개 집계 (커뮤니티 난이도, 주요 주제, 품질)는 의견이 충분히 모이면 공개됩니다.

Log in to rate problems.

개별 의견

아직 의견이 없습니다. 자격이 된다면 위 양식에서 가장 먼저 평가해 보세요.

풀이 제출

영수증 거스름돈 동전 최소화

게스트로 둘러보고 있습니다. 로그인하면 풀이를 제출하고 진행 상황을 확인할 수 있습니다. 로그인하고 제출하기
공개
C++20 Tab 들여쓰기 · Ctrl+/ 주석 토글 · Enter 자동 들여쓰기
1 1 1 0 공백: 4 · UTF-8