본문 바로가기
프로그래밍 기초/Java Festival

[Java Festival] 04. 거스름돈 문제 해결하기

by 제이투더문 2024. 6. 21.

 

 안녕하세요, 작가 J입니다. 오늘은 거스름돈 문제를 간단하게 해결하는 방법을 알아보겠습니다. 일상 생활에서도 유용한 이 문제를 통해 프로그래밍 실력을 키워봅시다.

 

[Java Festival 04] 거스름돈 문제 해결하기

 

 거스름돈을 입력 받아 내어줘야 하는 지폐의 개수를 출력하는 프로그램을 작성하시오.

단, 최대단위는 10000원, 최소단위는 100원

 

 

 

문제 요약

  • 입력: 총 금액을 입력받습니다.
  • 출력: 입력된 총 금액에 대해 필요한 지폐의 개수를 출력합니다.
  • 지폐 단위: 10,000원, 5,000원, 1,000원, 500원, 100원.

문제 분석

 거스름돈을 입력받아야 하므로, 우리는 Scanner 객체를 사용할 것입니다. 이 문제는 조건문이나 반복문 없이 나누기와 나머지 연산자를 통해 간단하게 해결할 수 있습니다.

 

먼저 최대한 한 줄로 해결할 수 있도록 만든 코드를 소개하겠습니다.

코드 풀이

import java.util.Scanner;

public class Main {
	public static void main(String[] args) {
		Scanner sc = new Scanner(System.in);
		System.out.print("총금액 입력 : ");
		int exMoney = sc.nextInt();
		
		System.out.println("잔돈 : " + exMoney);
		System.out.println("10000원 : " + exMoney / 10000 + "개"); // 25600 / 10000 = 2
		System.out.println("5000원 : " + (exMoney % 10000) / 5000 + "개"); // 25600 % 10000 = 5600 / 5000 = 1
		System.out.println("1000원 : " + (exMoney % 5000) / 1000 + "개"); // 25600 % 5000 = 600 / 1000 = 0
		System.out.println("500원 : " + (exMoney % 1000) / 500 + "개"); // 25600 % 1000 = 600 / 500 = 1
		System.out.println("100원 : " + (exMoney % 500) / 100 + "개"); // 25600 % 500 = 100 / 100 = 1
	}
}

 

 위 코드는 각 계산 방법을 주석으로 설명하며 최대한 한 줄로 해결하려고 했습니다. 하지만 이는 가독성이 좋지 않을 수 있습니다. 좀 더 쉽고 깔끔하게 작성해 보겠습니다.

 

간단하고 순차적인 코드 풀이

이번에는 좀 더 읽기 쉬운 코드를 작성해보겠습니다.

import java.util.Scanner;

public class Main {
	public static void main(String[] args) {
		Scanner scanner = new Scanner(System.in);
        System.out.print("총금액 입력: ");
        int totalAmount2 = scanner.nextInt();
        
        int totalAmount = totalAmount2; // 계산을 위한 변수 옮기기

        int tenThousand = totalAmount / 10000;
        totalAmount %= 10000;

        int fiveThousand = totalAmount / 5000;
        totalAmount %= 5000;

        int oneThousand = totalAmount / 1000;
        totalAmount %= 1000;

        int fiveHundred = totalAmount / 500;
        totalAmount %= 500;

        int oneHundred = totalAmount / 100;
        totalAmount %= 100;

        System.out.println("잔돈: " + totalAmount2 + "원");
        System.out.println("10000원: " + tenThousand + "개");
        System.out.println("5000원: " + fiveThousand + "개");
        System.out.println("1000원: " + oneThousand + "개");
        System.out.println("500원: " + fiveHundred + "개");
        System.out.println("100원: " + oneHundred + "개");
	}
}

 

 위의 코드는 조금 길지만, 거스름돈을 구하는 방식을 차분하고 순차적으로 해결했습니다. 일단 금액을 입력받고, 입력받은 금액은 그대로 두기 위해 또 다른 변수에 옮깁니다. 그리고 각 잔돈 금액 단위로 나누고, 남은 금액을 업데이트 합니다.

 

마무리

 이 문제를 통해 반복문 없이 간단한 계산과 나머지 연산을 활용하여 실생활의 문제를 해결하는 방법을 배웠습니다. 단순한 로직이지만, 이러한 문제 해결 능력이 실생활에서도 유용하게 쓰일 수 있음을 기억하세요.

 

 위 문제에서도 두 풀이에 답은 없습니다. 둘 다 같은 결과를 도출해내고, 방식 또한 틀린 것은 없습니다. 다만, 어느 코드가 보는 입장에서 가독성이 좋고 해석하기 쉬운지를 감안해야 합니다. 내가 작성한 코드를 어느 누가 볼지 모르기 때문에 이를 고려하는 것이 큰 도움이 됩니다.

 

 거스름돈 문제는 프로그래밍 입문자에게 매우 유용한 연습 문제입니다. 간단한 나눗셈과 나머지 연산을 통해 큰 문제를 작은 단위로 나누어 해결하는 법을 배울 수 있습니다. 이러한 문제 해결 능력은 더 복잡한 프로그래밍 문제를 풀 때도 큰 도움이 됩니다.

 

 이렇게 간단한 문제부터 시작해서 더 어려운 문제를 해결할 수 있는 능력을 키워보겠습니다. 계속해서 달려보도록 하겠습니다. 감사합니다!