TIL | [알고리즘] 3진법 뒤집기(Java)

THINKING

  1. 10진법을 3진법으로 바꾸자
    • (n % 3)을 이용하여 list에 3진법 역순을 바로 구하자
  2. 3진법을 다시 10진법으로 바꾸자
    • Math,.pow() : 거듭제곱 구하는 메소드 활용하자

내 풀이

import java.util.ArrayList;

class Solution {
    public int solution(int n) {
        int answer = 0;
        ArrayList<Integer> temp = new ArrayList<>();

        while(n != 0) {
            temp.add(n % 3);
            n /= 3;
        }

        int cnt = temp.size() - 1;
        for (int i : temp) {
            answer += Math.pow(3, cnt--) * i;
        }
        return answer;
    }
}

좋아요 많이 받은 풀이

class Solution {
    public int solution(int n) {
        String a = "";

        while(n > 0){
            a = a + (n % 3);
            n /= 3;
        }
        a = new StringBuilder(a).toString();

        return Integer.parseInt(a,3);
    }
}

배운 것

원래 좋아요 많이 받은 풀이에는

while(n > 0){
    a = (n % 3) + a;
    n /= 3;
}
a = new StringBuilder(a).reversese().toString();

이렇게 (n % 3) 뒤에 a를 붙이고 reverse()를 이용해 역순을 만들었는데, 좀 더 생각해보니 a + (n % 3)을 하면 reverse()를 사용하지 않고도 역순으로 정렬할 수 있다고 판단해 조금 변형을 했다.

또한, Integer.parseInt()에 파라미터가 하나만 들어가는 줄 알았는데, Integer.parseInt(String s, int radix) 이렇게 파라미터 두 개가 들어가 있다는 것을 알게 되었다.

Integer.parseInt(String s, int radix)

문자열 s를 radix 진수의 Integer형으로 변환시켜준다

위의 풀이에서는 문자열 a를 3진수 Integer형으로 변환시키는 방법으로 문제에 사용했다.

좋은 웹페이지 즐겨찾기