10진수 -> 3진수로 바꿔준 후, 해당 3진수를 뒤집은 다음 10진수로 바꿔주는 문제를 풀었다.
예를 들어 11은 3진수로 바꾸면 102, 뒤집으면 201, 다시 10진수로 바꿔주면 19가 된다.
public int solution(int n) {
int num =0;
for(int i=0;;i++){
if(Math.pow(3,i) <= n && n< Math.pow(3,i+1)){
num=i;
break;
}
}
int [] arr3digit = new int [num+1];
for(int i=num; i>=0; i--){
double tmp = Math.pow(3,i);
arr3digit[i] = n / (int)tmp;
n = n % (int)tmp;
}
int answer = 0;
int x=0;
for(int i=arr3digit.length-1; i>=0;i--){
double tmp = Math.pow(3,i) * arr3digit[x];
x++;
answer = answer + (int)tmp;
}
return answer;
}
Math.pow
와 배열을 통해서 문제를 해결했다.
class Solution {
public int solution(int n) {
String a = "";
while(n > 0){
a = (n % 3) + a;//a+(n%3)
n /= 3;
}
a = new StringBuilder(a).reverse().toString();
return Integer.parseInt(a,3);
}
}
parseInt(x, n)을 사용할 경우, x를 n진법으로 바꿔준 후 리턴해준다는 것을 알게 되었다.