본문 바로가기

JAVA/알고리즘 예제

[JAVA] 출장비 지급액 화폐 단위별 매수 계산 문제

직원 개인별로 지급되는 충장비 지급액에 대한 화폐 단위별 매수를 구한 후 결과를 출력하는 알고리즘을 구성하라.


<조건>

화폐는 고액권을 우선으로 한다.

화폐 단위는 5만원권 부터 1원권 까지 10종류로 한다.

성명과 출장비지급액을 입력받는다. 성명에 quit가 입력될 경우 종료한다.

출력은 성명, 출장비지급액, 개인별 각 화폐 매수로 하며, 마지막에 화폐 단위별 전체 매수를 출력한다.

변수 설명은 주석으로 대체


출력 예시



콘솔창으로 입력과 출력을 동시에 하기 때문에 결과를 출력하기 여의치 않음.

(AWT로 출력창을 만들어 보기.)

(또는 2차원 배열로 출력해 보기)


기본적인 로직은 다음과 같다.

package jungbo;


import java.util.InputMismatchException;

import java.util.Scanner;


public class P256MoneyCounter {

public static void main(String[] args) {

int sum[] = new int[10]; //개인별 매수 합계

int total[] = new int[10]; //총 매수 합계

int i; //반복문을 돌릴 변수

//제목과 항목을 출력


for(i=0;i<10;i++){ //전부 0으로 초기화

sum[i]=0;

total[i]=0;

}

String name; //이름을 입력받을 변수

int money=0;  //출장비를 입력받을 변수

int T;  //출장비를 계산에 사용하기 위해 옮겨둘 변수

int M;  //지폐의 단위를 넣을 변수

int sw = 1; //지폐의 단위를 바꿀때 사용할 조건 스위치

String yn;  //입력 정보 최종 확인 여부를 받을 변수

loop :while(true){

while(true){

while(true){

Scanner scan = new Scanner(System.in);

System.out.print("이름을 입력하세요 : ");

name = scan.nextLine();

if(name.equals("quit")){

System.out.println("입력 종료");

break loop;

}

break;

}//name end

try{

while(true){

Scanner scan = new Scanner(System.in);

System.out.print("출장비를 입력하세요 : ");

money = scan.nextInt();

break;

}

}catch(InputMismatchException e){

System.out.println("숫자만 입력해야 합니다.");

}//money end

Scanner scan = new Scanner(System.in);

System.out.println("이름 : "+ name + " 님 | 출장비 : " + money +" 원");

System.out.print("입력하신 정보가 맞으시면 y를 입력하세요. : ");

yn = scan.nextLine();

if(yn.equals("y") || yn.equals("Y")){

break;

}else{

System.out.println("정보를 다시 입력합니다.");

}

}//input end

T=money;  //계산을 위한 임시공간 T에 금액을 대입

M=50000;  //지폐의 단위는 최고액권인 50000원 권 부터 

for(i=0;i<10;i++){ //지폐는 10종류이므로 10번 반복

sum[i] = T/M;  //현재 단위의 지폐가 몇 장인지 계산하여 기록

T = T-(sum[i]*M); //계산된 금액만큼 전체 금액에서 제함

if(sw==1){ //지폐의 시작단위가 5라면 1로

M=M/5;

sw=0;

}else{     //지폐의 시작단위가 1이면 5로

M=M/2;

sw=1;

}

}

//name(이름)과 money(금액)을 출력

for(i=0;i<10;i++){

//sum[i](화폐별 매수)를 출력 

total[i]=total[i]+sum[i];

}

}//algorithm end

//총 매수 출력

}//main end

}//class end