희렌버핏
[백준] 5585 거스름돈 - JAVA 본문
문제
타로는 자주 JOI잡화점에서 물건을 산다. JOI잡화점에는 잔돈으로 500엔, 100엔, 50엔, 10엔, 5엔, 1엔이 충분히 있고, 언제나 거스름돈 개수가 가장 적게 잔돈을 준다. 타로가 JOI잡화점에서 물건을 사고 카운터에서 1000엔 지폐를 한장 냈을 때, 받을 잔돈에 포함된 잔돈의 개수를 구하는 프로그램을 작성하시오.
예를 들어 입력된 예1의 경우에는 아래 그림에서 처럼 4개를 출력해야 한다.
입력
입력은 한줄로 이루어져있고, 타로가 지불할 돈(1 이상 1000미만의 정수) 1개가 쓰여져있다.
출력
제출할 출력 파일은 1행으로만 되어 있다. 잔돈에 포함된 매수를 출력하시오.
예제 입력 1
380
예제 출력 1
4
내 코드 (140ms)
- 1000에서 입력한 금액을 빼고 거스름 총액을 구한다.
- 화폐 단위를 담은 배열에서 큰수부터 꺼내 각 화폐별 필요한 수를 담는다.
- 다음 화폐를 계산할 때마다 init 값을 다시 설정한다.
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.Arrays;
public class Main {
public static void main(String[] args) throws IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
int init = Integer.parseInt(br.readLine());
init = 1000 - init;
int[] money = {500,100,50,10,5,1};
int count = 0;
for(int i=0; init!=0; i++) {
count += init/money[i];
init = init%money[i];
}
System.out.println(count);
}
}
다른사람 코드 (128ms)
- 필요한 화폐단위인지 체크하는 로직이 있다. (필요할 경우 계산, 아닐경우 다음 화폐 계산)
=> 여러번 if문 안에 진입해서 count를 1씩 증가시킨다. while문이 가장 효율적인가??;;
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
public class Main {
public static void main(String[] args) throws Exception, IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
int num = Integer.parseInt(br.readLine());
int[] array = {500,100,50,10,5,1};
int total = 1000 - num; //620
int count = 0;
for(int i = 0; i < 6; i++) {
while(true) {
if(total / array[i] > 0) {
total = total - array[i];
count++;
}else
break;
}
}
System.out.println(count);
}
}
'Web > 알고리즘' 카테고리의 다른 글
[백준] 1946 신입 사원 - JAVA (0) | 2020.12.01 |
---|---|
[백준] 2217 로프 - JAVA (0) | 2020.11.29 |
[백준] 1541 잃어버린 괄호 - JAVA (0) | 2020.11.25 |
[백준] 11399 ATM - JAVA (0) | 2020.11.24 |
[백준] 1931 회의실 배정 - JAVA (0) | 2020.11.24 |