본문 바로가기

혼자 코딩 공부하기/프로그래머스 코딩테스트

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

문제 설명

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

 

제한사항

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

 

입출력 예

 


문제 풀이

 

모든 진법은 원하는 수로 값을 나누어 원하는 값 미만이 될 때까지 진행

남은 나머지를 역순으로 그리면 값이 나옴

 

List 와 Stack 을 사용하여 값 구하기

List 인 경우 값을 역순으로 출력하고, Stack은 pop 하면 역순으로 나오므로 해당 값에 맞게 수식 작성

 

import java.util.*;

class Solution {
    public int solution(int n) {
        int answer = 0;
        int result = 0;

        ArrayList<Integer> list = new ArrayList<>();
        Stack<Integer> stack = new Stack<>();

        while (n / 3 > 0) {
            int temp = n % 3; // 나머지 구하기
            list.add(temp); 
            stack.push(temp); // 나머지를 list 와 stack 에 담기
            n /= 3;
        }
        
        list.add(n);
        stack.push(n); // n 을 3 으로 나눈 값이 0 일 경우 n 에 마지막 남은 값이 있어 해당 값 담기

        for (int i = 0, j = list.size() - 1; i < list.size(); i++, j--) {
            answer += (int) (list.get(j) * Math.pow(3, i));
        }

        for (int i = 0; i < stack.size(); i++) {
            result += (int) (stack.pop() * Math.pow(3, i));
        }
        
        return answer;
    }
}