
어떤 십진수의 수 A가 주어졌을 때, 이를 n진수로 표현하면 회문인지 아닌지 판별하는 문제이다.
십진수 A의 범위가 100,000,000,000이므로 long 자료형을 사용해야한다.
자바에서 toString()메소드에 base 옵션을 넣어 사용하면 10진수를 base에 맞게 해당 진수로 변환시켜준다. 그 값을 뒤집어서 같은지 판별하면 된다.
뒤집는 것은 StringBuilder의 revserse() 메소드를 사용하면 쉽게 구한다.
주의할 점은 StringBuilder를 String으로 바꾸지 않고 비교하면 값비교가 아니기 때문에 항상 true가 나온다.
T x A의 문자열 길이가 시간 복잡도이다.
해결언어 : Java
import java.io.BufferedReader;
import java.io.FileInputStream;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.StringTokenizer;
public class Main {
static StringBuilder sb = new StringBuilder();
static int T, n;
static long a;
public static void main(String[] args) throws IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
StringTokenizer st;
T = Integer.parseInt(br.readLine());
for (int i = 0; i < T; i++) {
st = new StringTokenizer(br.readLine());
a = Long.parseLong(st.nextToken());
n = Integer.parseInt(st.nextToken());
StringBuilder res = new StringBuilder(Long.toString(a, n));
sb.append(isPalindrome(res) ? 1 : 0).append("\n");
}
System.out.println(sb);
br.close();
}
static boolean isPalindrome(StringBuilder str) {
StringBuilder rvs = new StringBuilder(str).reverse();
return str.toString().equals(rvs.toString());
}
}
