프로그래머스 [JAVA] :: 3진법 뒤집기

smi·2023년 2월 2일
0

📚 문제 정의

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


📝 제한사항

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

📝 입출력 예

nresult
457
125229

  • 답을 도출하는 과정은 다음과 같습니다.
n (10진법)n (3진법)앞뒤 반전(3진법)10진법으로 표현
45120000217
1251112222111229

💡 코드

import java.util.*;

class Solution {
    public int solution(int n) {
        StringBuffer sb = new StringBuffer();
        
        // 10진법 -> 3진법
        String three = Integer.toString(n, 3);
        
        // 앞 뒤 반전
        for(int i = three.length() - 1; i > -1; i--) {
            sb.append(three.charAt(i));
        }
        
        // 3진법 -> 10진법
        int ten = Integer.parseInt(sb.toString(), 3);
        return ten;
    }
}

원래 처음에는 앞 뒤 반전 부분을 while 문을 사용해서 풀었는데 런타임 에러가 나길래 StringBuffer랑 charAt()을 사용해서 풀었다.

💡 다른 코드

class Solution {
    public int solution(int n) {
        String a = "";
        
        // 10진법 -> 3진법
        while(n > 0){
            a = (n % 3) + a;
            n /= 3;
        }
        
        // 앞 뒤 반전
        a = new StringBuilder(a).reverse().toString();
        
        // 3진법 -> 10진법
        return Integer.parseInt(a,3);
    }
}

while을 10진법을 3진법으로 전환할 때 사용했고, 앞 뒤 반전은 StringBuilder의 reverse() 메소드를 사용해서 쉽게 반전한 코드이다.

profile
공부한 거 올려요 :)

0개의 댓글