자연수 n이 매개변수로 주어집니다. n을 3진법 상에서 앞뒤로 뒤집은 후, 이를 다시 10진법으로 표현한 수를 return 하도록 solution 함수를 완성해주세요.
n | result |
---|---|
45 | 7 |
125 | 229 |
n (10진법) | n (3진법) | 앞뒤 반전(3진법) | 10진법으로 표현 |
---|---|---|---|
45 | 1200 | 0021 | 7 |
125 | 11122 | 22111 | 229 |
import java.util.*;
class Solution {
public int solution(int n) {
StringBuffer sb = new StringBuffer();
// 10진법 -> 3진법
String three = Integer.toString(n, 3);
// 앞 뒤 반전
for(int i = three.length() - 1; i > -1; i--) {
sb.append(three.charAt(i));
}
// 3진법 -> 10진법
int ten = Integer.parseInt(sb.toString(), 3);
return ten;
}
}
원래 처음에는 앞 뒤 반전 부분을 while 문을 사용해서 풀었는데 런타임 에러가 나길래 StringBuffer랑 charAt()을 사용해서 풀었다.
class Solution {
public int solution(int n) {
String a = "";
// 10진법 -> 3진법
while(n > 0){
a = (n % 3) + a;
n /= 3;
}
// 앞 뒤 반전
a = new StringBuilder(a).reverse().toString();
// 3진법 -> 10진법
return Integer.parseInt(a,3);
}
}
while을 10진법을 3진법으로 전환할 때 사용했고, 앞 뒤 반전은 StringBuilder의 reverse() 메소드를 사용해서 쉽게 반전한 코드이다.