문제 내용은 입력으로 값을 받아서 5와 3으로 나눌 경우 나누는 횟수의 최소값을 구해줘야 하는데, 나올 수 있는 케이스는 5로 나누고 끝나는 경우, 5로 몇번 나눈 뒤 3으로 나눠서 끝나는 경우, 3으로만 나누면 끝나는 경우, 5와 3을 사용해도 나눌 수 없는 경우까지 해서 총 네 가지의 케이스를 처리해주면 되는데
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
public class Main{
public static void main(String[] args) throws IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
int val = Integer.parseInt(br.readLine());
int maxFive = 0;
int count = 0;
if(val % 5 == 0) {
System.out.println(val / 5);
} else {
for (int i = 1; i * 5 < val; i++) {
if ((val - (5 * i)) % 3 == 0) {
maxFive = Math.max(maxFive, i);
}
}
val -= 5 * maxFive;
if (val % 3 == 0) {
count += val / 3;
System.out.println(count + maxFive);
} else {
System.out.println(-1);
}
}
}
}
코딩을 해 보자면 먼저 5로 나눠서 끝나면 바로 끝내버리면 되고, 그렇지 않을 경우에는 5로 몇번까지 나눌 수 있을지 봐야 되는데 for 문을 돌리면서 5로 나눈 뒤 3으로 나누면 0으로 떨어지는 값을 찾되 반복문을 통해 1씩 올려주면서 최대값을 찾아준 후 maxFive 변수에 저장해주고
3으로 나눠보기 전, 5 * maxFive(5로 나눌 수 있는 최대값) 을 해주고 난 다음 3으로 나눠서 나눈 횟수와 5로 나눈 횟수를 더해준 후 출력해주면 끝이고, 3으로도 모두 나눌 수 없었다면 -1을 출력해주면 끝이다.
Leave a Reply