[월간 코드 챌린지 시즌1] 3진법 뒤집기

Posted by 김성철

코딩테스트 - 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 해야 합니다.

class Solution {
public int solution(int n) {
int answer = 0;
String temp=””;

    //3진법으로 변환  
    while(true){  
        if(n/3>=1){  
            temp = n%3 + temp;  
            n = n/3;  
        }else{  
            temp = n%3 + temp;  
            break;  
        }  
    }  
    System.out.println(temp);  
    //변환된 3진법을 역순으로 정렬  
    String splitString[] = temp.split("");  
    temp="";  
    for(int i=splitString.length-1;i>=0;i--){  
        temp+=splitString[i];  
    }  
    System.out.println(temp);  
    //정렬된 3진법을 숫자형으로 변환, 다만 int형보다 커질수 있기에 Long 으로 변환하여 계산함  
    Long a = Long.parseLong(temp);  
  
    //10진법 변환에 사용할 자릿수  
    int c=1;  
  
    //10진법으로 변환  
    while(true){  
        if(a/10>=1){  
            answer += a%10*c;  
            a = a/10;  
            c *=3;  
        }else{  
            answer += a%10*c;  
            break;  
        }  
  
    }  
  
    return answer;  
}   }