자연수 n이 매개변수로 주어집니다. n을 3진법 상에서 앞뒤로 뒤집은 후, 이를 다시 10진법으로 표현한 수를 return 하도록 solution 함수를 완성해주세요.
n | result |
---|---|
45 | 7 |
125 | 229 |
입출력 예 #1
n (10진법) | n (3진법) | 앞뒤 반전(3진법) | 10진법으로 표현 |
---|---|---|---|
45 | 1200 | 0021 | 7 |
입출력 예 #2
n (10진법) | n (3진법) | 앞뒤 반전(3진법) | 10진법으로 표현 |
---|---|---|---|
125 | 11122 | 22111 | 229 |
class Solution {
public int solution(int n) {
int answer = 0;
String ten_to_three = "";
// (1)
while (n > 0) {
int share = n / 3;
int remainder = n % 3;
if (remainder > 9) {
ten_to_three = (char) (remainder + 55) + ten_to_three;
} else {
ten_to_three = remainder + ten_to_three;
}
n = share;
}
// (2)
StringBuffer sb = new StringBuffer(ten_to_three);
String reverse_ten_to_three = sb.reverse().toString();
answer = Integer.parseInt(reverse_ten_to_three, 3);
return answer;
}
}
(1) : 10진수 n을 3진법으로 변환해서 ten_to_three에 대입
(2) : 구해진 3진법 ten_to_three를 뒤집기 위해 StringBuffer를 활용
// (1)
class Solution {
public int solution(int n) {
int answer = 0;
String ten_to_three = "";
// (2)
ten_to_three = Integer.toString(n, 3);
// (3)
StringBuffer sb = new StringBuffer(ten_to_three);
String reverse_ten_to_three = sb.reverse().toString();
answer = Integer.parseInt(reverse_ten_to_three, 3);
return answer;
}
}
(1) : 해당 문제는 다 Integer의 메소드만 사용해서 풀었다. 첫 번째 풀이보다 실행 기간이 비약적으로 줄어들었다.
(2) : 10진수 n을 3진법으로 변환해서 ten_to_three에 대입
(3) : 구해진 3진법 ten_to_three를 뒤집기 위해 StringBuffer를 활용
-> Irish Github