알고리즘 공부/프로그래머스

(Java)프로그래머스 코딩테스트 연습 - 월간 코드 챌린지 시즌1 - 3진법 뒤집기

HRuler 2020. 11. 10. 20:07

1. 문제

https://programmers.co.kr/learn/courses/30/lessons/68935?language=java

 

코딩테스트 연습 - 3진법 뒤집기

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

programmers.co.kr

2. 나의 풀이

class Solution {
    public int solution(int n) {
        int answer = 0;
        //n을 3진법으로 변환
        String imsi = "";
        while(n > 0) {
        	imsi = (n % 3) + imsi;
        	n = n / 3;
        }
        int su = 1;
        for(int i = 0; i < imsi.length(); i = i + 1) {
        	answer += Integer.parseInt(imsi.substring(i, i + 1)) * (su);
        	su *= 3;
        }
        
        return answer;
    }
}

3. 다른 사람 풀이

class Solution {
    public int solution(int n) {
        int answer = 0;
        String third = Integer.toString(n, 3);
        StringBuffer sb = new StringBuffer(third);
        String reversed = sb.reverse().toString();

        int exp = 0;
        for (int i = reversed.length() - 1; i >= 0; i--) {
            answer += Integer.parseInt(String.valueOf(reversed.charAt(i))) * Math.pow(3, exp);
            exp++;
        }

        return answer;
    }
}