[JAVA] 프로그래머스 (Lv.1) 3진법 뒤집기

AIR·2023년 8월 14일
0

링크

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


문제 설명

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


제한사항

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


입출력 예

nresult
457
125229

나의 코드

import java.util.*;

class Solution {
    public int solution(int n) {
   
        int answer = 0;
        ArrayList<Integer> list = new ArrayList<>();
        int cnt = 0;
     
        while (n > 0) {
        	// n이 3으로 나누어떨어질 때 list에 0을 삽입
            if (n % 3 == 0) {
                list.add(0);
                n /= 3;
            // n이 3으로 나누어떨어지지 않을 때 list에 나머지를 삽입
            } else {
                list.add(n % 3);
                n /= 3;
            }
        }        
       
        // n = 45일 때
        // list = [0, 0, 2, 1], 3진법의 역순으로 list에 저장된다
        // list에서 역순으로 값을 반환하고
        // cnt 값을 1씩 증가시키면서 10진법으로 변환
        for (int i = list.size() - 1 ; i >= 0 ; i--) {
            answer += list.get(i) * Math.pow(3, cnt++);
        }
      
        return answer;
    }
}

다른 사람의 풀이

class Solution {
    public int solution(int n) {

        StringBuilder sb = new StringBuilder();

        while (n > 0) {
            sb.append(n % 3);
            n /= 3;
        }
        sb.reverse();

        return Integer.parseInt(sb.toString(), 3);
    }
}

정리

생각해보니 어짜피 0도 결국 3으로 나눈 나머지인데 굳이 if else로 나눌 필요가 없었다.
더하여 StringBuilder 객체에 reverse() 메소드가 있다는 것도 알게되었고
Integer.parseInt(스트링, 진수)에서 바로 진수변환이 가능하다는 것을 알게되었다.

profile
백엔드

2개의 댓글

comment-user-thumbnail
2023년 8월 14일

개발자로서 배울 점이 많은 글이었습니다. 감사합니다.

1개의 답글