프로그래머스

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

빙수빈수 2021. 7. 16. 15:37

https://programmers.co.kr/learn/courses/30/lessons/68935

 

코딩테스트 연습 - 3진법 뒤집기

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

programmers.co.kr

[문제]

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

 

[제한 조건]

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

 

[코드]

import java.util.*;

class Solution {
public int solution(int n) {
        int answer = 0;
        ArrayList<Integer> three=new ArrayList<Integer>();
        int num=n;
        
        // 10진법을 3진법 역순으로 바꿔 ArrayList에 저장
        while(num>0) {
        	three.add(num%3);
        	num/=3;
        }
        
        /*
         * ArrayList에는 이미 n을 3진법으로 바꾼 수가 역순으로 저장되어 있기 때문에
         * 그 순서대로 다시 10진법으로 바꾸면 된다. 
         */
        for(int i=0;i<three.size();i++) 
        	answer+=three.get(i)*Math.pow(3, three.size()-1-i);
        
        return answer;
    }
}

 

[고찰]

 이번 문제는 n을 3으로 나눈 수를 저장하게 되면 n을 3진법으로 바꾼 수의 역순으로 저장되기 때문에 저장된 수 그대로 다시 10진법으로 바꿔주면 된다. 풀면서 어떤 수가 지금 ArrayList에 저장되는지 출력하면서 해결해나가니 쉽게 이해하면서 풀 수 있었다.