본문 바로가기
알고리즘 & 자료구조/프로그래머스

이진 변환 반복하기

by 신재권 2022. 12. 29.
package programmers;

import java.math.BigInteger;
import java.util.Arrays;

public class 이진변환반복하기 {

   public static int[] solution(String s) {
      StringBuilder sb;
      int zeroCount = 0;
      int binaryCount = 0;
      BigInteger bigInteger = new BigInteger(s);

      while ((bigInteger.compareTo(new BigInteger("1"))) > 0) {
         binaryCount++;
         sb = new StringBuilder();

         for (int i = 0; i < s.length(); i++) {
            if (s.charAt(i) == '1') {
               sb.append(s.charAt(i));
            } else {
               zeroCount++;
            }
         }

         bigInteger = new BigInteger(converter(String.valueOf(sb.length())));
         s = String.valueOf(bigInteger);
      }

      return new int[] {binaryCount, zeroCount};
   }

   private static String converter(String s) {
      StringBuilder sb = new StringBuilder();
      BigInteger bigInteger = new BigInteger(s);

      while ((bigInteger.compareTo(new BigInteger("1"))) > 0) {
         sb.append(bigInteger.remainder(new BigInteger("2")));
         bigInteger = bigInteger.divide(new BigInteger("2"));
      }
      sb.append(bigInteger);
      return sb.reverse().toString();
   }

   public static void main(String[] args) {
      System.out.println(Arrays.toString(solution("110010101001")));
      System.out.println(Arrays.toString(solution("01110")));
      System.out.println(Arrays.toString(solution("1111111")));
   }

}

'알고리즘 & 자료구조 > 프로그래머스' 카테고리의 다른 글

피보나치 수  (0) 2022.12.31
숫자의 표현  (0) 2022.12.30
올바른 괄호  (0) 2022.12.28
최솟값 만들기  (0) 2022.12.27
JadenCase 문자열 만들기  (0) 2022.12.26