[코딩테스트] 3진법 뒤집기

한지연·2023년 4월 14일
0

문제 설명

자연수 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이 순서로 들어갔기 때문에 그냥 바로 사용했다.

profile
배우고 활용하는 것을 즐기는 개발자, 한지연입니다!

0개의 댓글