프로그래머스

[프로그래머스] 3진법 뒤집기 - Java(자바)

nan2 2022. 10. 3. 19:06
반응형
문제설명
  • 자연수 n이 매개변수로 주어집니다.
  • n을 3진법 상에서 앞뒤로 뒤집은 후, 이를 다시 10진법으로 표현한 수를 return 하도록 solution 함수를 완성해주세요.

 

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

 

입출력 예

45 7
125 229

 


[ 내가 푼 방법 ]

class Solution {
    public int solution(int n) {
        int answer = 0;
        
        //1. 3진법으로 변환 & 역전
        String threeN = "";
        while (n > 0){
            threeN += n % 3;
            n = n / 3;
        }
        
        //2. 10진법으로 변환
        char[] chars = threeN.toCharArray();
        int cnt = chars.length-1;
        for (int i=0; i<chars.length; i++){
            answer +=  Character.getNumericValue(chars[i]) * Math.pow(3,cnt);
            cnt--;
        }   
        
        return answer;
    }
}

순서대로 3진법으로 만든 후 값을 역전시키고, 다시 10진법을 만들기로 함

 

1. threeN이라는 문자열에 n을 3으로 나눈 나머지를 더해줌 ( 이 자체로 3진법 변환 & 역전까지 한 값이 됨)

→ 정수 n 을 3진법으로 변환하는 방법은 n 을 3으로 나눈 나머지를 거꾸로 입력해주는것

ex) n = 11 인경우 3진법으로 변환    →   102

3  | 11  

    ㅡㅡㅡ

3  |  3        ---  2

    ㅡㅡㅡ

    |  1        ---  0

    ㅡㅡㅡ

 

 

2.   3진법의 역전된 수를 10진법으로 변환해줌

char 형의 값을 int 형으로 변환하기 위한 메서드 : Charcter.getNumbericValue(char타입)

거듭 제곱 구하는 메서드 : Math.pow(아래 정수값, 위 지수 값)

ex) Math.pow(2, 3) -> 2의 3제곱 -> 8

 

 

 

[ 다른 풀이방법 ]

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

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


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

 

→ Integer.parseInt("문자열숫자 a" , 진수); -> 해당 진수의 값 a를 10진수로 변환해준다!!

 

 

※ Integer 클래스 이용하여 10진수를 2진수, 8진수, 16진수로 변환해주기

//a는 문자열 숫자
//10진수 -> 2진수 
Integer.toBinaryString(a);

//10진수 -> 8진수
Integer.toOctalString(a);

//10진수 -> 16진수
Integer.toHexString(a);
반응형