[Java] programmers-"3진법 뒤집기"

김빛나리·2021년 12월 29일

문제 설명

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



제한사항

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


입축력 예

nresult
457
125229


알고리즘

  1. 10진법인 num을 n진법으로 바꾸고 싶다면, 그 알고리즘은 아래와 같다.
    while(num>0) {
        System.out.println(num%n);
        num /= n;
    }
  1. 또, n진법인 num을 10진법으로 바꾸고 싶다면, 그 알고리즘은 아래와 같다.
    String str_num = Integer.toString(num);
    int answer = 0;
    
    for (int i=0;i<str_num.length();i++) {
        answer += Character.getNumericValue(str_num.charAt(i)) * (int)Math.pow(n, str_num.length()-1);
    }
  1. 그러나 구하고자 하는 것은 앞뒤 반전 후, 10진법으로 바꿔야하기 때문에 for문 안에 코드를 변형시켜준다. (Math.pow() 함수에서 지수인 부분에 -i만 추가시켜주면 된다.)
    answer += Character.getNumericValue(str_num.charAt(i)) * (int)Math.pow(n, str_num.length()-1-i);


내 소스 코드

import java.util.ArrayList;

class Solution {
    public int solution(int n) {
        int answer = 0;
        ArrayList<Integer> list = new ArrayList<Integer>();
        int div_n = n;
        
        while(div_n>0) {
            list.add(div_n%3);
            div_n /= 3;
        }
        
        for (int i=0;i<list.size();i++) {
            answer += list.get(i) * (int)Math.pow(3, list.size()-1-i);
        }
        
        return answer;
    }
}

0개의 댓글