3진법 뒤집기_Java

컴투루·2022년 6월 30일
0

프로그래머스 Lv.1

목록 보기
29/38

월간 코드 챌린지 시즌1

🔥 3진법 뒤집기 🔥


👀 문제

자연수 n이 매개변수로 주어질때, n을 3진법 상에서 앞뒤로 뒤집은 후 , 이를 다시 10진법으로 표현한 수를 return하는 solution을 완성해보자.


✔️ 조건

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

👩‍💻 입력 & 🧙 출력

nreturn
457
125229

🙋‍♀️ 풀이

class Solution {
    public int solution(int n) {
        int answer = 0;
        
        StringBuilder sb = new StringBuilder();
        
        while (n >= 3){
            sb.append(n%3);
            n = n/3;
        }        
        sb.append(n%3);

        String s = sb.toString();
        String[] x = s.split("");
        int j = 1;
        
        for(int i=x.length-1;i>-1;i--){
            int m = Integer.parseInt(x[i]);
            answer = answer + m*j;
               j = j*3;
        }

        return answer;
    }
}
  1. n이 3보다 크거나 같을때까지 반복하면서 StringBuilder인 sb에 n%3을 append해주고 n은 n/3으로 다시 대입해주었다.
  2. toString으로 String으로 변환, split으로 배열로 변환해주었다.
  3. 반복문을 돌면서 answer에 x의 각 값과 3의 제곱들을 더해주었다.

꽤나 복잡하다.
어떻게 풀지 생각할때는 간단하게 풀릴거라고 생각했는데 막상 코드를 작성하니까 뭔가 지저분하고 깔끔하지 못하다.
그래서 찾아보니 자바에서 제공하는 방법들이 있었다^^ 하하


💬 다른 풀이

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);
    }
}
  • N진법 ➡️ 10진법
    - Integer.parseInt (i, n);
  • 10진법 ➡️ N진법
    - 2진법 : Integer.toBinaryString(n);
    - 8진법 : Integer.toOctalString(n);
    - 16진법 : Integer.toHexString(n);

내가 원하던 코드

  1. n이 0보다 클때까지 반복하면서
  2. n을 3으로 나눈 나머지와 a를 a에 대입해주고
  3. n은 반복문이 돌아갈때마다 3으로 나눈 몫으로 대입해준다.
  4. StringBuilder의 reverse로 뒤집어주고
  5. Integer.parseInt(a,3)으로 3진법을 10진법으로 바꾼다.

알고리즘-진법 변환하기

profile
맘 먹으면 못할 게 없지

0개의 댓글