알고리즘/알고리즘(Java)

05. 거스름돈 계산 문제

산을좋아한라쯔 2015. 3. 30. 20:55
반응형

## 문제 ##

가게에 점원을 고용했는데 조금 띨띨해서 잔돈을 거슬러주는 것을 잘 하지 못한다. 구두쇠인 아저씨는 이로 인해서 손해가 나는 것을 알았다.
그래서 당신에게 손님에게 거슬러 줄 돈을 계산하는 프로그램을 만들어 달라고 부탁했다.
화폐 단위는 다음과 같다.


• quartes $0.25
• dimes $0.10
• nickels $0.05
• pennies $0.01

이 가게에서는 5 $ 이내로는 동전으로 거슬러 준다. 또한 그는 손님들이 가져가기 좋도록 동전의 개수를 가장 최소로 거슬러 주기를 원한다.
예를 들어, $1.24 인 경우 거슬러 줄 돈은


• 4 quarters
• 2 dimes
• 0 nickels
• 4 pennies

이다.

입력
입력으로 cents C 가 주어진다.(1 <= C <= 500)

출력
아래와 같은 형식으로 출력한다.
Q QUARTER(S), D DIME(S), n NICKEL(S), P PENNY(S)
Q,D,N,P 는 각각 quarter, dimes , nickels, pennys 수 이다.

입출력 예
입력

124

 

출력

4 QUARTER(S), 2 DIME(S), 0 NICKEL(S), 4 PENNY(S)

 

 

입력

25

 

출력

1 QUARTER(S), 0 DIME(S), 0 NICKEL(S), 0 PENNY(S)

 

 

입력

194

 

출력

7 QUARTER(S), 1 DIME(S), 1 NICKEL(S), 4 PENNY(S)
 

 

## 풀이 ##

m값을 주면 quarter, dime, nickel, penny순으로 사용동전 갯수배열을 리턴하는 메서드.

private void cChange(long m,int[] ch){
  for(int i=0;i<BASE.length;i++){
   ch[i] = (int)(m / BASE[i]);
   m = m % BASE[i];
  }
 }

위에서 BASE = {25,10,5,1}

 

## 소스 ##

package p1;

 

public class MoneyChange {

         private static final int[] BASE = {25,10,5,1};

 

         public MoneyChange(){

                  doTest();

         }

        

         private void doTest(){

                  long inputMoney=0;

                  String outputStr="";

                 

                  inputMoney = 124;

                  outputStr = calculateChange(inputMoney);

                  System.out.println(outputStr);

                 

                  inputMoney = 25;

                  outputStr = calculateChange(inputMoney);

                  System.out.println(outputStr);

                 

                  inputMoney = 194;

                  outputStr = calculateChange(inputMoney);

                  System.out.println(outputStr);

         }

        

         private String calculateChange(long m){

                  int[] ch = new int[BASE.length];

                  cChange(m,ch);

                 

                  StringBuffer sb = new StringBuffer();

                  String[] str= {"QUARTER(S)","DIME(S)","NICKEL(S)","PENNY(S"};

                  for(int i=0;i<ch.length;i++){

                           sb.append(ch[i]+" "+str[i]+",");

                  }                

                  return sb.toString();

         }

        

         private void cChange(long m,int[] ch){

                  for(int i=0;i<BASE.length;i++){

                           ch[i] = (int)(m / BASE[i]);

                           m = m % BASE[i];

                  }

         }

        

         public static void main(String[] args) {

                  new MoneyChange();

 

         }

 

}

 

-끝-

반응형