10진수를 특정 진법으로 변환하는 문제이다.
보통 10진수를 특정 진법으로 변환할 때 인수분해 하여 나머지를 역순으로 적어주어 완성하는 방식을 그대로 코드로 옮겨주면 된다.
import java.io.*;
import java.util.*;
import java.util.stream.*;
public class Main {
public static BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
public static StringBuilder sb = new StringBuilder();
public static int number, base;
public static List<Integer> answer = new ArrayList<>();
public static void main(String[] args) throws IOException {
int[] input = Arrays.stream(br.readLine().trim().split(" ")).mapToInt(Integer::parseInt).toArray();
number = input[0];
base = input[1];
while(true) {
if (number < base) {
answer.add(number);
break;
}
answer.add(number % base);
number /= base;
}
Collections.reverse(answer);
for (Integer ele : answer) {
sb.append(ele);
}
System.out.println(sb);
br.close();
}
}
시간복잡도는 O(logN)이 된다.
여기서 N은 진법(base)를 나타낸다. 왜냐하면 계속 N진수를 만들기 위해 N으로 계속 나눌 수 없을 때까지 나누기 때문이다.