본문 바로가기
  • 개발 / 공부 / 일상
Programmers

(Programmers) [Lv. 2] 이진 변환 반복하기

by JJeongHyun 2023. 2. 8.
반응형

문제 설명

  • 0과 1로 이루어진 문자열 x를 매개변수로 주어진다
  • 이진 변환이란 다음과 같다
    • 문자열 x의 모든 0을 제거
    • x의 길이를 c라고 하면, x를 "c를 2진법으로 표현한 문자열"로 바꾼다
  • 예를 들면, x = "0111010"  → 이진 변환
    • x = "0111010"
    • x = "1111"
    • x = "100"
    • ...
  • 위와 같은 변환을 "1"이 될 때까지 반복하여 이진변환의 횟수와 0을 제거한 개수를 배열로 반환하는 solution 함수를 완성하시오.

 

제한사항

  • s의 길이는 1 이상 150,000 이하입니다
  • s에는 "1"이 최소 하나 이상 포함되어 있습니다

 

입출력 예시

이진 변환 반복하기 입출력 예시

 

전체 코드

function solution(s) {
  let countBinary = 0;
  let countZero = 0;
  while (1) {
    for (let i = 0; i < s.length; i++) {
      if (s[i] == "0") countZero++;
    }
    let tempStr = [...s].map((item) => item.replace("0", "")).join("");
    let tempArr = [];
    let length = tempStr.length;
    while (length > 0) {
      tempArr.push(length % 2);
      length = parseInt(length / 2);
    }
    countBinary++;
    s = tempArr.join("");
    if (s.length === 1 && s[0] === "1") break;
  }
  return [countBinary, countZero];
}