Algorithms/- 프로그래머스

프로그래머스 - 3진법 뒤집기 [자바]

자굿 2022. 1. 31. 01:52
 

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

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

programmers.co.kr

정답

import java.util.*;

class Solution {
    public int solution(int n) {
        int answer = 0;
        List<Integer> list = new ArrayList<>();
        //처음부터 뒤집어 짐

        while(n != 0){
            list.add(n % 3);
            n = n / 3;
        }

        int multi = 1;
        for(int i=list.size() - 1; i>=0; i--){
            if(list.get(i) != 0){
                answer += list.get(i) * multi;
            }
            multi *= 3;
        }

        return answer;
    }
}

분석

  • 3진법을 list 쌓을 때 뒤집어져 있기 때문에 그대로 3을 곱해주면 된다.

참고할 만한 정답

  • parseInt 에서 진수를 선택하여 변환할 수 있음.
  • reverse를 굳이 안 써도됨
class Solution {
    public int solution(int n) {
        String a = "";

        while(n > 0){
            a = (n % 3) + a;
            n /= 3;
        }
        a = new StringBuilder(a).reverse().toString();


        return Integer.parseInt(a,3);
    }
}
  • 이게 최적의 정답 같음
class Solution {
    public int solution(int n) {
        String a = "";

        while(n > 0){
            a += (n % 3);
            n /= 3;
        }

        return Integer.parseInt(a,3);
    }
}
반응형