코딩 공부

[백준] 5585번 - 거스름돈 (Java)

ZZJJing 2020. 7. 30. 23:03

 

거스름돈을 풀어본다.. 

 

https://www.acmicpc.net/problem/5585

 

5585번: 거스름돈

문제 타로는 자주 JOI잡화점에서 물건을 산다. JOI잡화점에는 잔돈으로 500엔, 100엔, 50엔, 10엔, 5엔, 1엔이 충분히 있고, 언제나 거스름돈 개수가 가장 적게 잔돈을 준다. 타로가 JOI잡화점에서 물건�

www.acmicpc.net

 

문제

타로는 자주 JOI잡화점에서 물건을 산다. JOI잡화점에는 잔돈으로 500엔, 100엔, 50엔, 10엔, 5엔, 1엔이 충분히 있고, 언제나 거스름돈 개수가 가장 적게 잔돈을 준다. 타로가 JOI잡화점에서 물건을 사고 카운터에서 1000엔 지폐를 한 장 냈을 때, 받을 잔돈에 포함된 잔돈의 개수를 구하는 프로그램을 작성하시오.

예를 들어 입력된 예1의 경우에는 아래 그림에서 처럼 4개를 출력해야 한다.

입력

입력은 한줄로 이루어져 있고, 타로가 지불할 돈(1 이상 1000 미만의 정수) 1개가 쓰여있다.

출력

제출할 출력 파일은 1행으로만 되어 있다. 잔돈에 포함된 매수를 출력하시오.

 

 


 

아주 쉬운 것 같은데 내 머리는 돌아가질 않는다.. (ू˃̣̣̣̣̣̣︿˂̣̣̣̣̣̣ ू)

 

 

더보기

혼자 주저리주저리... 나의 회로 기록 〣(ºΔº)〣

 

잔돈 
500엔 / 100엔 / 50엔 / 10엔 / 5엔 /1엔 
거스름돈 개수가 가장 적게 잔돈을 준다. 
1000 미만의 정수를 입력 받음 

예를 들어 380
1000원 - 380원 = 620원 
500원  -1개 100원 -1개 10원 -2개  
100원 - 1000원 = 900원 
500원 - 1개 100원 -4개
10원 - 1000원 = 990원
500원 -1개 100원 -4개 50원 -1개 10원 -4개 
-> 가장 큰 수부터 채우고 나머지가 있으면 다음으로 내려가면 되네. 
1. 일단 입력받은 금액에서 -1000 한다.
2. 나머지 금액을 일단 500을 뺀다. (1 이상 1000 미만의 정수가 조건이니깐)
-> 아, 아니.. 일단 500을 기준으로 500 이상인지, 미만인지 해서 500원을 1개 할지 0개 할지 정하자. 
3. 그러면 2개가 나온다. 500 이상일 경우 (500-1개) / 500 미만일 경우 (500-0개)
-> 분류 후에는 100자리를 정리한다. -> 그다음엔 50짜리 -> 10 짜리 -> 5짜리 -> 1짜리.. 
계속 반본 -> for문을 쓰자.? 일단 나눠서 처리한다. 

122 / 100 -> 몫 1 / 나머지가 22 

500 / 100 - 400 
100 / 50 - 50 
50 / 10 - 40 
20 / 5 - 15
5 / 1 - 4..................................?? 

다 기준 값만큼 몫을 구해서 다 더한 다음 그만큼을 for 문을 돌리면?

 

이런 똥 멍충 한 생각을 했지만...............  1시간 반 만에 배열을 생각해냄.. (ू˃̣̣̣̣̣̣︿˂̣̣̣̣̣̣ ू) (ू˃̣̣̣̣̣̣︿˂̣̣̣̣̣̣ ू)

난 진짜 바보인 것인가.............................ㅋㅋㅋㅋㅋ ㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋ 

자괴감이 개쩐 저녁................ ŏ̥̥̥̥םŏ̥̥̥̥

 

 

// int fiveH;
// int oneH = (fiveH > 1? change-500 : change) / 100; 
// int fiveT = (oneH > 1? change-(100 * oneH) : change) / 50; 
// int oneT = (fiveT > 1? change-(50 * fiveT) : change) / 10;
// int fiveO = (oneT > 1? change-(10 * oneT) : change) / 5;
// int oneO = (fiveO > 1? change-(5 * fiveO) : change) / 1;

 

이딴 몹시 쓸데없는 짓도 해보고....ㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋ 

또 한 시간이 갔다.. ㅎㄷㄷ 

 

최종적으로 답을 쓰기 전에 생각해 낸 것은 이것 

 

1) 가장 작은 몫 하려면 큰 값부터 쳐내야 함 

2) for 문을 돌리려면 기준이 있어야 한다. 

3) 나머지가 남으면 계속 돌아야 한다!!!

 

// 몫  0 , 나머지 0 -> 종료 
// 몫 있고, 나머지 0 -> 종료 
// 몫 없고, 나머지 있음 -> 계속 
// 몫 있고, 나머지 있음 -> 계속 

 

 

 

 

흠 한 3시간은 걸린 듯? 그래도 혼자 생각해 냈다는 것에 만족... 해볼까..? 

ㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋ 

ㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋ

ㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋ

갈길이 너무 멀다.。。。。。。(,,Ծ‸Ծ,, ) 꾸무룩 

 

 

 


 

다른 분의 것

 

 

BufferedReader / InputStreamReader ..... 언제 스스로 써볼 수 있을까 ? 
이렇게 간단하게 코딩 할 수 있게 하쟈 .