[プログラマー][java]3進反転


質問リンク-https://programmers.co.kr/learn/courses/30/lessons/68935
  • トラブルシューティング
    これは
  • の10進数を3進数に変換した後、10進数に変換する問題です.
    十進法を三進法にする
    10->3->1->0(シェア)
    -----1->0->1----(残り)->101反転時は101
    45->15->5->1->0(シェア)
    ------0-----2-----(残り)->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;
      }
    }