Q. 편의점에서 물건을 사고 거스름돈을 받으려고 한다. 거스름돈을 5000원권, 1000원권, 500원, 100원, 50원, 10원을 조합하여 받는다고 할 때, 각각 몇 장(개)씩 받게 되는지 프로그램을 작성하라.
1) 물건가격: 3210원, 지불금액: 10000원
2) 물건가격, 지불금액을 입력하고 그에 따른 결과를 출력 (Scanner 이용)
< 1)에 대한 Solution_1 >
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
|
package test;
public class MainClass {
public static void main(String[] args) {
int price,myMoney,change; //지불금액, 물건가격, 거스름돈 변수 선언
price = 3210;
myMoney = 10000;
System.out.println("물건가격 : " + price + "원");
System.out.println("지불금액 : " + myMoney + "원");
change = myMoney - price; // 6790 = 10000 - 3210
System.out.println("거스름돈 = " + change + "원");
int m5000 ,m1000, m500, m100, m50, m10; // 각 지폐 및 동전 변수 선언
m5000 = change / 5000; // 몫을 계산 6790 / 5000 의 몫은 1
m1000 = (change % 5000) / 1000; // 5000원권으로 거슬러준 후 나머지에 대해 몫을 계산
m500 = ((change % 5000) % 1000) / 500; // 1000원권으로 거슬러준 후 나머지에 대해 몫을 계산
m100 = (((change % 5000) % 1000) % 500) / 100; //이하 반복
m50 = ((((change % 5000) % 1000) % 500) % 100) / 50;
m10 = (((((change % 5000) % 1000) % 500) % 100) % 50) / 10;
// 출력
System.out.println("5000원: " + m5000 + "장");
System.out.println("1000원: " + m1000 + "장");
System.out.println("500원: " + m500 + "개");
System.out.println("100원: " + m100 + "개");
System.out.println("50원: " + m50 + "개");
System.out.println("10원: " + m10 + "개");
}
}
|
cs |
< Console >

- 출력값은 틀리지 않았으나, 소스 코드 작성 부분에서 몫과 나머지를 구하는 코드가 복잡하다는 단점이 있었다. 간소화하여 다시 한번 풀어보기로 하였다.
< 1)에 대한 Solution_2 >
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
|
package test;
public class MainClass {
public static void main(String[] args) {
int price,myMoney,change; //지불금액, 물건가격, 거스름돈 변수 선언
price = 3210;
myMoney = 10000;
System.out.println("물건가격 : " + price + "원");
System.out.println("지불금액 : " + myMoney + "원");
change = myMoney - price; // 6790 = 10000 - 3210
System.out.println("거스름돈 = " + change + "원");
int m5000 ,m1000, m500, m100, m50, m10; // 각 지폐 및 동전 변수 선언
//5000
int m5000 = change / 5000; // 6790/5000의 몫은 1
//1000
int m1000 = (change % 5000) / 1000;
//500
int m500 = (change % 1000) / 500;
//100
int m100 = (change % 500) / 100;
//50
int m50 = (change % 100) / 50;
//10
int m10 = (change % 50) / 10;
// 5000원 짜리는 모두 1000원짜리 지폐로 대체가 가능하고
// 500원짜리 동전은 모두 100원짜리 동전으로 대체가 가능하므로 위와 같은 코드를 작성할 수 있다.
// 출력
System.out.println("5000원: " + m5000 + "장");
System.out.println("1000원: " + m1000 + "장");
System.out.println("500원: " + m500 + "개");
System.out.println("100원: " + m100 + "개");
System.out.println("50원: " + m50 + "개");
System.out.println("10원: " + m10 + "개");
}
}
|
cs |
< 2)에 대한 Solution >
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
|
package test;
import java.util.Scanner;
public class MainClass {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in); //Scanner class의 객체를 생성
int price, myMoney, change;
System.out.print("물건가격 : ");
price = sc.nextInt();
System.out.print("지불금액 : ");
myMoney = sc.nextInt();
// 거스름돈
change = myMoney - price;
System.out.println("거스름돈 = " + change + "원");
//5000
int m5000 = change / 5000; // 6790/5000의 몫은 1
//1000
int m1000 = (change % 5000) / 1000;
//500
int m500 = (change % 1000) / 500;
//100
int m100 = (change % 500) / 100;
//50
int m50 = (change % 100) / 50;
//10
int m10 = (change % 50) / 10;
// 5000원 짜리는 모두 1000원짜리 지폐로 대체가 가능하고
// 500원짜리 동전은 모두 100원짜리 동전으로 대체가 가능하므로 위와 같은 코드를 작성할 수 있다.
// 출력
System.out.println("5000원: " + m5000 + "장");
System.out.println("1000원: " + m1000 + "장");
System.out.println("500원: " + m500 + "개");
System.out.println("100원: " + m100 + "개");
System.out.println("50원: " + m50 + "개");
System.out.println("10원: " + m10 + "개");
}
}
|
cs |
< Console >

'알고리즘 및 코테 > 기타 문제' 카테고리의 다른 글
별 찍기(Java) (2) | 2023.01.12 |
---|---|
MySQL - select from문의 이용 (0) | 2023.01.02 |
Java 문제 - 값의 교환(swap) (0) | 2022.12.20 |
Java 문제 - Scanner, print를 이용한 입출력 프로그램 (0) | 2022.12.20 |
Java문제 - 출력 프로그램 작성 (0) | 2022.12.20 |