3진법 뒤집기

문제

자연수 n이 매개변수로 주어집니다. n을 3진법 상에서 앞뒤로 뒤집은 후, 이를 다시 10진법으로 표현한 수를 return 하도록 solution 함수를 완성해주세요.

제한사항

  • n은 1 이상 100,000,000 이하인 자연수입니다.

입출력 예

n result
45 7
125 229

입출력 예 #1

n (10진법) n (3진법) 앞뒤 반전(3진법) 10진법으로 표현
45 1200 0021 7

따라서 7을 return 해야 합니다.

입출력 예 #2

n (10진법) n (3진법) 앞뒤 반전(3진법) 10진법으로 표현
125 11122 22111 229

따라서 229를 return 해야 합니다.

답안

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
class Solution {
public int solution(int n) {
int answer = 0;

// n = 1 일때 1리턴
if(n == 1){
return 1;
}

String answerReverse = Ternary("", n);
answer = getTernary(answerReverse);
return answer;
}

public String Ternary(String answer, int n){

// n으로 나눈 수가 3보다 작다면 (마지막수) => 나머지 + 몫
if(n/3 < 3){
answer = answer + n%3;
answer = answer + n/3;
return answer;
}

answer = answer + n % 3;
answer = Ternary(answer, n/3);

return answer;
}

public int getTernary(String answerReverse) {
Double n = 0.0;

for(int i = 0 ; i < answerReverse.length(); i++){
n += Character.getNumericValue(answerReverse.charAt(i)) * Math.pow(3, answerReverse.length() - 1 - i);
}

int answer = (int) Math.round(n);
return answer;
}
}

Math.pow(base, exponent)
base : 밑 값.
exponent : 밑 을 제곱하기 위해 사용하는 지수.
return : 주어진 밑 값을 주어진 지수 값으로 거듭제곱한 숫자 값.

Character.getNumericValue(char a)
숫자 형태의 char형을 int형으로 변환하는 메소드