알고리즘/JAVA

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

야아옹 2020. 10. 21. 15:11

문제 : 자연수 n이 매개변수로 주어집니다. n을 3진법 상에서 앞뒤로 뒤집은 후, 이를 다시 10진법으로 표현한 수를 return 하시오!

 

제한사항 : 

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

 

 

풀이 :

package com.company;

import java.util.Arrays;
import java.util.Stack;

public class TernaryFlip {
    public static void main(String[] args) {
        System.out.println(solution(45));
        System.out.println(solution(125));
    }
    public static int solution(int n) {
        int answer = 0;
        int division;
        int lastValue;

        Stack<Integer> s = new Stack<Integer>();
        while(true)
        {
            division = n / 3;
            lastValue = n % 3;
            s.push(lastValue);
            n = division;
            if (division == 0) break;
        }

        long s_length = s.stream().count();
        for (int i = 0; i < s_length; i++)
        {
            answer+= s.pop() * Math.pow(3,i);
        }
        return  answer;

    }
}