아직 만들고 있는 페이지입니다.

이 페이지는 아직 만드는 중입니다. 보이는 내용은 바뀔 수 있습니다.

균형 잡힌 거스름돈

시간 제한1초메모리 제한128 MB

요약
서랍에 있는 다섯 종류 동전의 개수와 거슬러 줄 금액이 주어질 때, 남은 동전의 불균형이 최소가 되도록 줄 동전을 고른다.
난이도

보통10점 중 5점

유형
동적 계획법, 완전 탐색, 그리디
정답자
아직 제출이 없습니다

문제

점원이 손님에게 거스름돈을 줄 때는 보통 동전 개수를 가장 적게 해서 건넭니다. 예를 들어 $2를 거슬러 줘야 하는 손님에게는 $1 동전 2개나 50c 동전 4개가 아니라 $2 동전 1개를 주는 것이 보통입니다. 하지만 서랍에 든 동전 재고가 한쪽으로 치우쳐 있으면, 최소 개수로 주는 방법이 항상 최선은 아닙니다. $1 동전이 넘칠 만큼 쌓여 있다면, 그 칸을 줄이기 위해서라도 $1 동전 2개를 주는 편이 더 나을 수 있습니다.

계산대 서랍에는 $2, $1, 50c, 20c, 10c 동전을 담는 칸이 5개 있습니다. 서랍의 불균형도(imbalance) 를 다음과 같이 정의합니다. 어느 한 칸이 가진 동전 개수의 최솟값을 min 이라 합시다. 불균형도는 각 칸에 대해 min 을 초과하는 개수의 제곱을, 다섯 칸 모두에 대해 더한 값입니다. 예를 들어 $2, $1, 50c, 20c, 10c 동전이 각각 2, 3, 4, 3, 5개 있다면 min = 2이고, 불균형도는 (2−2)2+(3−2)2+(4−2)2+(3−2)2+(5−2)2=0+1+4+1+9=15(2-2)^2 + (3-2)^2 + (4-2)^2 + (3-2)^2 + (5-2)^2 = 0 + 1 + 4 + 1 + 9 = 15 입니다.

서랍에 든 동전과 거슬러 줄 금액이 주어질 때, 거스름돈을 주고 난 뒤 서랍에 남는 동전의 불균형도가 가장 작아지도록 어떤 동전을 줄지 고르세요. 같은 최소 불균형도를 만드는 방법이 여러 가지라면, $2 동전을 가장 많이 주는 방법을 고릅니다. 그것도 같다면 $1 동전을 가장 많이, 그 다음 50c, 그 다음 순서로 우선합니다.

입력

입력에는 여러 개의 거스름돈 문제가 한 줄에 하나씩 들어 있습니다. 각 줄은 정수 5개와 금액 하나로 이루어집니다. 정수 5개는 서랍에 있는 $2, $1, 50c, 20c, 10c 동전의 개수입니다. 금액은 $n.m 형태이며, 달러 정수부 n은 항상 있고(0일 수도 있음), 센트부 m은 항상 두 자리입니다. 이것이 거슬러 줄 금액입니다.

입력은 0 다섯 개와 $0.00 만 있는 줄로 끝나며, 이 줄은 풀어야 할 문제가 아닙니다. 거슬러 줄 금액은 항상 0보다 크고 $5를 넘지 않습니다.

출력

각 문제마다 Problem #k: 로 시작하는 한 줄을 출력합니다. k는 입력에서 그 문제의 순서이며 1부터 셈니다. 이어서 줄 동전을 출력합니다. 사용하는 각 액면에 대해 $2, $1, 50c, 20c, 10c 순서로 개수와 액면을 적습니다(예: 2 50c). 여러 개면 쉼표로 구분하고 마지막 항목 앞에 and 를 넣으며, 줄 끝에 coin(s) 를 붙입니다. 정확한 거스름돈을 줄 수 없으면 Problem #k: 뒤에 대신 not possible 을 출력합니다.

예제1

  1. 예제 1

    입력
    2 2 4 2 2 $1.00
    0 0 0 0 0 $1.00
    2 2 4 3 1 $1.30
    0 0 0 0 0 $0.00
    
    예상 출력
    Problem #1: 2 50c coin(s)
    Problem #2: not possible
    Problem #3: 2 50c, 1 20c and 1 10c coin(s)