이것이 취업을 위한 코딩 테스트다. with 파이썬 - 나동빈
public class UntilItBecomeOne {
public static void main(String[] args) throws IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
String str = br.readLine();
String[] split = str.split(" ");
int count = 0;
int N = Integer.parseInt(split[0]);
int K = Integer.parseInt(split[1]);
while(N != 1) {
if(N % K == 0) {
N = N / K;
count++;
} else {
N--;
count++;
}
}
System.out.println(count);
}
}
문제에서는 N의 범위가 10만 이하이므로, 1씩 빼도 문제를 해결할 수 있다. 하지만 100억 이상의 큰 수가 되는 경우라면 효율적으로 1씩이 아닌, 한 번에 빼는 방식으로 작성해야 한다.
while (true) {
// N이 K로 나누어 떨어지는 수가 될 때까지만 1씩 빼기
int target = (n / k) * k;
result += (n - target);
n = target;
// N이 K보다 작을 때 (더 이상 나눌 수 없을 때) 반복문 탈출
if (n < k) break;
// K로 나누기
result += 1;
n /= k;
}
// 마지막으로 남은 수에 대하여 1씩 빼기
result += (n - 1);
System.out.println(result);