문제 분석
- 2원과 5원으로만 거스름돈을 줄 때, 최소로 거슬러 줄 수 있는 개수 구하기
- 만약, 거슬러 줄 수 없다면 -1 출력
의사 결정
- 주어진 거스름돈 액수가 5로 나누어질 때까지 2씩 빼는 방식을 사용했습니다.
코드 구현
1. 거스름돈 액수 입력받기
StringBuilder sb = new StringBuilder();
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
int num = Integer.parseInt(br.readLine());
2. 거스름돈 액수 계산 및 결과 출력
입력받은 num이 먼저 5로 나누어떨어지는지 확인했습니다.
5의 배수면 나눈 값을 바로 결과로 출력했습니다.
5의 배수가 아니면, while문을 통해 2씩 빼가면서 count를 증가시키고, 나머지 값이 5로 나누어떨어지는지 확인했습니다.
반복문에서 num이 5로 나누어떨어지는 값이 되면, 2의 배수 횟수(count)와 5로 나눈 값을 더해 거스름돈 개수를 출력했습니다.
int count = 0;
if(num % 5 == 0) {
num /= 5;
sb.append(num);
} else {
while(num > 0) {
num -= 2;
count++;
if(num % 5 == 0) {
num /= 5;
count += num;
sb.append(count);
break;
}
}
}
if(num < 0) System.out.print(-1);
System.out.print(sb);
전체 코드
import java.io.*;
public class Main {
public static void main(String[] args) throws Exception {
StringBuilder sb = new StringBuilder();
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
int num = Integer.parseInt(br.readLine());
int count = 0;
if(num % 5 == 0) {
num /= 5;
sb.append(num);
} else {
while(num > 0) {
num -= 2;
count++;
if(num % 5 == 0) {
num /= 5;
count += num;
sb.append(count);
break;
}
}
}
if(num < 0) System.out.print(-1);
System.out.print(sb);
}
}
'코딩테스트 > 백준(Beakjoon)' 카테고리의 다른 글
[백준] 2660 회장뽑기 (JAVA) - 풀이 (0) | 2024.10.07 |
---|---|
[백준] 2212 센서 (JAVA) - 풀이 (0) | 2024.10.05 |
[백준] 2631 줄세우기 (JAVA) - 풀이 (0) | 2024.10.04 |
[백준] 1965 상자넣기 (JAVA) - DP 풀이 (0) | 2024.10.04 |
[백준] 1022 소용돌이 이쁘게 출력하기(JAVA) (1) | 2024.10.03 |