문제 링크 - https://programmers.co.kr/learn/courses/30/lessons/68935
- 문제 해결
- 10진법을 3진법으로 바꾸어 뒤집은 후, 다시 10진법으로 바꾸는 문제이다.
10진법을 3진법으로 바꾸는 방법 -> 3으로 계속 나누어 본다!
10 -> 3 -> 1 -> 0 (몫)
----1 -> 0 -> 1----(나머지) -> 101을 뒤집으면 101
45 -> 15 -> 5 -> 1 -> 0 (몫)
----0----0----2----1---(나머지) -> 0021을 뒤집으면 1200
따라서 몫이 0이 될 때까지 계속 3으로 나눈 나머지를 저장 후 뒤집으면 끝!
3진법을 10진법으로 바꾸는 방법 -> 각 자리수에 3의 제곱수들을 곱한다!
1 2 0 0 -> 1 x 3^3 + 2 x 3^2 + 0 x 3^1 + 0 x 3^0 ->45
class Solution {
public int solution(int n) {
StringBuilder sb = new StringBuilder();
while(true){ //나누면서 계속 저장
if(n==0) break;
sb.append(String.valueOf(n%3));
n/=3;
}
Long third = Long.valueOf(sb.toString()); //이미 뒤집힌 상태
int cnt = 0;
int result=0;
while(true){ //3진법을 10진법으로
if(third==0) break;
else{
result+=(third%10)*Math.pow(3,cnt);
third/=10;
cnt++;
}
}
return result;
}
}