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

ming·2023년 4월 2일

3진법 뒤집기

문제 설명

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

  • 제한사항
    n은 1 이상 100,000,000 이하인 자연수입니다.

풀이 전, 진법 변환에 대해 알아 보자


진법의 변환을 시행하는데 주로 쓰는 방법은 이렇게 변환하고자 하는 정수로 계속 나누어 나머지들은 구하면 된다.
첫 나머지가 맨 오른쪽에 위치하게 된다. 이 점을 이용해 뒤집는 걸 간단하게 해결할 수 있다.

코드

class Solution {
    public int solution(int n) {
        int answer = 0;
        String three = "";
        while(n != 0){
            three += n % 3; //뒤집은 순서대로 담긴다.
            n /= 3;
        }
        return answer = Integer.parseInt(three, 3); // 10진법으로 변환
    }
}

three += n % 3; 이렇게 하면 3진법변환 한 것을 뒤집은 것과 같은 결과이다.

  • N진법 -> 10진법
    Integer.parseInt(i, N);
  • 10진법 -> N진법
    Integer.toBinaryString(number); // 2진법
    Integer.toOctalString(number); // 8진법
    Integer.toHexString(number); // 16진법

풀이 2

메서드변환형내용
Integer.parseInt(String s, int radix)intradix진법으로 숫자를 표현하는 문자열 s를 정수로 변환
Integer.toString(int v, int radix)String정수v를 radix진법의 문자열로 변환

위의 표를 참고하면 더 간단하게 가능하다.

class Solution {
    public int solution(int n) {
        String str = Integer.toString(n, 3); //n을 3진법 문자열로 변환
        String reversed = new StringBuilder(str).reverse().toString(); // 뒤집기
        return Integer.parseInt(reversed, 3); //뒤집은 문자열 3진법 정수로 변환
    }
}
profile
개발 성장 기록

0개의 댓글