과거⚰️

달팽이 || 식권 자판기

아무루 2020. 11. 25. 18:48
package day044;

import java.util.Scanner;

public class Day04402식권자판기정답 {
	public static void main(String[] args) {
		Scanner scan = new Scanner(System.in);
		
		int[] moneys  = {50000, 10000, 5000, 1000, 500, 100};		// 화폐 종류
		int[] charges = {	 1,     1,    1,    1,   1,   5};		// 화폐 종류별 수량
		
		int ticketCount = 5;		// 식권의 재고 수량
		int ticketPrice = 3200;		// 식권의 가격
		
		while(true) {
			System.out.println("[식권 재고 수량] " + ticketCount + "장");
			System.out.println("[화폐종류별 수량]");
			for(int i=0; i<moneys.length; i++) {
				System.out.print(moneys[i] + "원(" + charges[i] + ")");
			}
			System.out.println();
			
			System.out.println("[1]관리자");
			System.out.println("[2]사용자");
			System.out.println("[0]종료");
			
			System.out.println("메뉴를 선택하세요.");
			int select = scan.nextInt();
			
			if(select == 1) {
				while(true) {
					System.out.println("1)식권충전");
					System.out.println("2)잔돈충전");
					System.out.println("3)뒤로가기");
					
					int choice = scan.nextInt();
					
					if(choice == 1) {
						System.out.println("[식권 재고 수량] " + ticketCount + "장");
						System.out.println("[식권충전]충전할 식권 수량을 작성하세요.");
						int addCount = scan.nextInt();
						
						ticketCount = ticketCount + addCount;
					}
					else if(choice == 2) {
						while(true) {
							System.out.println("[화폐종류별 수량]");
							for(int i=0; i<moneys.length; i++) {
								System.out.print(moneys[i] + "원(" + charges[i] + ")");
							}
							System.out.println();
							
							System.out.println("[잔돈충전]충전할 화폐의 종류를 선택하세요.");
							for(int i=0; i<moneys.length; i++) {
								System.out.println("[" + (i + 1) + "]" + moneys[i] + "원");
							}
							System.out.println("[0]뒤로가기");
							
							int number = scan.nextInt();
							if(number == 0) {
								break;
							}else {
								number = number - 1;
								
								charges[number] = charges[number] + 1;
							}
						}
					}
					else if(choice == 3) {
						break;
					}
				}
			}
			else if(select == 2) {
				while(true) {
					System.out.println("1)구입하기");
					System.out.println("2)뒤로가기");
					
					int choice = scan.nextInt();
					
					if(choice == 1) {
						System.out.println("[식권구매]구입할 식권 수를 입력하세요.");
						int myTicketcount = scan.nextInt();
						
						// 구매할 식권수량 > 재고수량
						if(myTicketcount > ticketCount) {
							System.out.println("[메세지]식권수가 부족합니다. 관리자에게 문의해주세요.");
							continue;
						}
						
						// 결제 금액 출력
						int payment = myTicketcount * ticketPrice;
						System.out.println("[메세지]결제하실 총 금액은 " + payment + "원 입니다.");
						
						// 지불할 금액 입력받기
						int[] myCharges = new int[charges.length];
						while(true) {
							System.out.println("[식권구매]지불할 화폐의 종류를 선택하세요.");
							for(int i=0; i<moneys.length; i++) {
								System.out.println("[" + (i + 1) + "]" + moneys[i] + "원");
							}
							System.out.println("[0]뒤로가기");
							
							int number = scan.nextInt();
							if(number == 0) {
								break;
							}else {
								number = number - 1;
								
								myCharges[number] = myCharges[number] + 1;
							}
						}
						// 지불한 총 금액 계산하기
						int myPayment = 0;
						for(int i=0; i<myCharges.length; i++) {
							myPayment = myPayment + myCharges[i] * moneys[i];
						}
						System.out.println("[메세지]지불하신 총 금액은 " + myPayment + "원 입니다.");
						
						// 지불한 총 금액 - 결제금액 >= 0 : 거래가능
						int charge = myPayment - payment;
						if(charge >= 0) {
							
							// # 만일 거스름돈을 돌려줄 화폐가 없다면 거래 불가
							// => 바로 처리하지 말고 임시변수에 저장해서 확인한 후 처리할 것
							int tempCharge = charge;
							int[] tempCharges = new int[charges.length];
							for(int i=0; i<charges.length; i++) {
								tempCharges[i] = charges[i];
							}
							System.out.println();
							
							for(int i=0; i<charges.length; i++) {
								while(true) {
									if(tempCharge >= moneys[i] && tempCharges[i] > 0) {
										tempCharge = tempCharge - moneys[i];
										tempCharges[i] = tempCharges[i] - 1;
									}else {
										break;
									}
								}
							}
							
							if(tempCharge == 0) {
								System.out.println("[메세지]잔돈은 " + charge + "원 입니다.\n이용해주셔서 감사합니다.");
								
								for(int i=0; i<charges.length; i++) {
									// 사용자에게 거스름돈으로 돌려주고 남은 돈 저장하기
									charges[i] = tempCharges[i];
									// 사용자가 투입한 금액 추가하기
									charges[i] = charges[i] + myCharges[i];
								}
								
								// 사용자가 구매한 식권 차감하기
								ticketCount = ticketCount - myTicketcount;
							}else {
								System.out.println("[메세지]거스름 돈이 부족해 거래가 불가합니다.");
							}
						}
						else {
							System.out.println("[메세지]금액이 부족합니다.");
						}
						
					}
					else if(choice == 2) {
						break;
					}
				}
			}
			else if(select == 0) {
				break;
			}
		}
		
	}
}


package day044;

/*
 * # 달팽이
 * 아래와 같이 출력해보세요.
 *
 * 1	2	3	4	5
 * 16	17	18	19	6
 * 15	24	25	20	7
 * 14	23	22	21	8
 * 13	12	11	10	9
 */

public class Day044012차원반복문심화3문제 {
    public static void main(String[] args) {

        int size = 5;
        int map[][] = new int[size][size];
        int x = 1;
        int cnt = size -1;
        int k=0;
        for (size=5; size>=2; size--){
            for(int j=k; j<size; j++){
                map[k][j]=x;
                x++;
            }
            if(x==26){
                break;
            }
            for (int j=1; j<size-k; j++){
                map[j+k][cnt-k]=x;
                x++;
            }
            for (int j=3-k; j>=0+k; j--){
                map[cnt-k][j]=x;
                x++;
            }
            for (int j=3-k; j>0+k; j--){
                map[j][k]=x;
                x++;
            }
            k++;
        }
        for (int i = 0; i < 5; i++) {
            for (int j = 0; j < 5; j++) {
                System.out.print(map[i][j] + "\t");
            }
            System.out.println();
        }

    }
}