문제 설명

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

제한 조건

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

풀이

import java.util.*;

class Solution {
    public int solution(int n) {
        if (n < 3) { // 3보다 작은 수는 그대로 반환한다.
            return n;
        }

        ArrayList<Integer> integers = new ArrayList<>();
        int mok = n; // 몫
        int temp = n; // 나머지

        while (mok > 2) { // 몫이 2보다 큰 경우까지만 loop
            temp = mok % 3;
            mok = mok / 3;
            integers.add(temp);
            if (mok < 3) {
                integers.add(mok);
            }
        } // 3진법 상에서 앞뒤로 뒤집은 상태로 integers에 담겨진다.

        double tempAnswer = 0;
        for (int i = 0; i < integers.size(); i++) {
            Integer integer = integers.get(integers.size() - (i + 1)); // 뒤에부터 꺼내서
            tempAnswer += (integer * Math.pow(3, i)); // 3의 i제곱근을 곱해서 더해준다
        }

        int answer = (int) Math.round(tempAnswer);

        return answer;
    }
}

카테고리:

업데이트:

댓글남기기