알고리즘

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

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

제한사항

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

입출력 예

nresult

45 7
125 229

입출력 예 설명

입출력 예 #1

  • 답을 도출하는 과정은 다음과 같습니다.

n (10진법)n (3진법)앞뒤 반전(3진법)10진법으로 표현

45 1200 0021 7
  • 따라서 7을 return 해야 합니다.

입출력 예 #2

  • 답을 도출하는 과정은 다음과 같습니다.

n (10진법)n (3진법)앞뒤 반전(3진법)10진법으로 표현

125 11122 22111 229
  • 따라서 229를 return 해야 합니다.

풀이

import java.util.ArrayList;

import java.io.BufferedReader;

import java.io.*;

import java.io.InputStreamReader;

import java.util.*;

import java.io.IOException;

 

class Solution {

    public int solution(int n) {

        int num = n; 

        String character = "012";

        List<Character> result = new ArrayList<>();

        

        while(num !=0) {

            result.add(character.charAt(num%3));

            num /= 3;

        }

 

        Collections.reverse(result);

        String[] beRe = new String[result.size()];

 

        for(int i=0;i<result.size();i++){

            beRe[i] = String.valueOf(result.get(i));

        }

 

        List<String> afRe = Arrays.asList(beRe);

        Collections.reverse(afRe);

        beRe = afRe.toArray(new String[afRe.size()]);

 

        int total = 0;

        int jari = 0;

        int start = 1;

        for(int k=beRe.length-1;k>=0;k--) {

            if(k == beRe.length-1) {

                jari = 1;

            } else {

                jari = (int) Math.pow(3, start);

                start++;

            }

            total += Integer.parseInt(beRe[k]) * jari;

 

        }

        return total;

    }

}