[프로그래머스][java] 3진법 뒤집기

김현진·2022년 1월 15일
0

코테준비

목록 보기
4/22

문제 링크 - https://programmers.co.kr/learn/courses/30/lessons/68935

  • 문제 해결
    • 10진법을 3진법으로 바꾸어 뒤집은 후, 다시 10진법으로 바꾸는 문제이다.
      10진법을 3진법으로 바꾸는 방법 -> 3으로 계속 나누어 본다!
      10 -> 3 -> 1 -> 0 (몫)
      ----1 -> 0 -> 1----(나머지) -> 101을 뒤집으면 101
      45 -> 15 -> 5 -> 1 -> 0 (몫)
      ----0----0----2----1---(나머지) -> 0021을 뒤집으면 1200

      따라서 몫이 0이 될 때까지 계속 3으로 나눈 나머지를 저장 후 뒤집으면 끝!

      3진법을 10진법으로 바꾸는 방법 -> 각 자리수에 3의 제곱수들을 곱한다!
      1 2 0 0 -> 1 x 3^3 + 2 x 3^2 + 0 x 3^1 + 0 x 3^0 ->45
class Solution {
  public int solution(int n) {
      StringBuilder sb = new StringBuilder();
      
      while(true){ //나누면서 계속 저장
          if(n==0) break;
          sb.append(String.valueOf(n%3));
          n/=3;
      }
      
      Long third = Long.valueOf(sb.toString()); //이미 뒤집힌 상태
     
      int cnt = 0;
      
      int result=0;
      
      while(true){ //3진법을 10진법으로
          if(third==0) break;
          else{
              result+=(third%10)*Math.pow(3,cnt);
              third/=10;
              cnt++;
          }
      }
      return result;
  }
}

0개의 댓글