👨‍💻 Coding Test/Programers

[Programmers/Java/Lv.1/수학] 45.3진법 뒤집기

Developer Quarterly 2025. 5. 28. 18:32

문제 설명

자연수 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

 

입출력 예 #2

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

 

풀이

class Solution {
    public int solution(int n) {
        StringBuilder ternary = new StringBuilder();

        // 1. 3진수 문자열로 만들기
        while(n > 0){
            ternary.append(n % 3);
            n /= 3;
        }

        // 2. 역순으로 저장되었기 때문에 그대로 사용
        String reversed = ternary.toString();

        // 3. 3진수 문자열을 10진수로 해석
        int answer = 0;
        int base = 1;
        for (int i = reversed.length() - 1; i >= 0; i--) {
            int digit = reversed.charAt(i) - '0';
            answer += digit * base;
            base *= 3;
        }

        return answer;
    }
}

 

풀이2

class Solution {
    public int solution(int n) {
        StringBuilder sb = new StringBuilder();

        // 1. 3진법 변환 (문자열 형태로)
        while(n > 0){
            sb.append(n % 3);
            n /= 3;
        }

        // 2. 뒤집을 필요 없이 이미 역순으로 append 했음
        String reversed = sb.toString();

        // 3. 뒤집힌 3진법 문자열을 10진수로 변환
        return Integer.parseInt(reversed, 3);
    }
}