문제 설명
자연수 n이 매개변수로 주어집니다. n을 3진법 상에서 앞뒤로 뒤집은 후, 이를 다시 10진법으로 표현한 수를 return 하도록 solution 함수를 완성해주세요.
입출력 예
n | result 45 | 7 125 | 229
입출력 예 설명
n (10진법) | n (3진법) | 앞뒤 반전(3진법) | 10진법으로 표현 45 | 1200 | 0021 |7
✅ 문제풀이
import java.util.*; class Solution { public int solution(int n) { int answer = 0; List<Integer> calcValue = new ArrayList<>(); while(n > 0){ calcValue.add(calc(n)); n = n/3; if(n == 0) break; } for(int i=0; i < calcValue.size(); i++){ answer += Math.pow(3, calcValue.size()-1-i) * calcValue.get(i); } return answer; } static int calc(int n){ return n > 1 ? n % 3 : n; } }
문제 설명
우선 이 문제를 풀기 위해선 3진법에 대한 이해가 필요하다.
삼진법이란?
3을 밑으로 하는 기수법으로 0, 1, 2를 사용하여 숫자를 표현한다.
삼진법 설명
해당 문제는 삼진법의 알고리즘을 이해하면 간단하게 풀 수 있다. 문제의 요구사항에는 1200을 뒤집을 숫자 0021을 출력하라고 했기 때문에 1200을 그대로 십진법으로 출력하는 실수를 해서는 안 된다. 나는 List를 이용하여 0021이 순서로 들어갔기 때문에 그냥 바로 사용했다.