어떠한 수 N이 1이 될 때 까지 다음의 두 과정 중 하나를 반복적으로 선택해 수행하려 함
단, 두번째 연산은 N이 K로 나누어 떨어질 때만 선택할 수 있음
N에서 1을 뺀다.
N을 K로 나눈다.
N이 1이 될 때 까지 1번 혹은 2번의 과정을 수행해야하는 최소 횟수를 구하는 프로그램을 작성
25 5
2
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.StringTokenizer;
/* 1이 될 때까지 */
public class greedy_04 {
public static void main(String[] args) throws IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
StringTokenizer st = new StringTokenizer(br.readLine(), " ");
int n = Integer.parseInt(st.nextToken());
int k = Integer.parseInt(st.nextToken());
int cnt = 0;
while (n >= k) {
// 나눌 수 있을 때 까지 뺄셈
while (n % k != 0) {
n--;
cnt++;
}
// 최대한 많이 나눔
n /= k;
cnt++;
}
// 남은 수가 1이 될 때까지
while (n > 1) {
n--;
cnt++;
}
System.out.println(cnt);
}
}
최대한 많이 나눈다
를 중점으로 두고 풀어야함