TIL 90 | 프로그래머스 이진변환반복(JS)

Gom·2021년 6월 12일
0

Algorithm

목록 보기
47/48

문제 접근

  1. 이진수의 문자열이 입력되면
  2. 0을 제거하고
  3. 남은 1의 개수를 기준으로 이진수로 다시 변환한다.
  4. 이진수로 변환된 수가 1이 될 때까지 반복한다.
  5. 변환된 수가 1이 되면 반복 횟수와 제거된 0의 개수를 반환한다.

코드

replaceAll 메소드를 이용하여 문자열 내에 0을 삭제하려 했는데
프로그래머스에서 해당 메소드를 인식하지 못했다. (크롬 브라우저에서는 인식이 되는 것을 확인했다.) replace에 전역으로 적용되는 정규표현식을 이용하여 0을 제거하는 방식으로 풀었다.

//https://programmers.co.kr/learn/courses/30/lessons/70129

function solution(s) {
    let repeatCnt = 0;
    let removeZeroCnt = 0;
    let binaryNum = s;
    
    function removeZero(n) {
        removeZeroCnt += n.length - n.replace(/0/gi,"").length;
        console.log(n.replace(/0/gi,"").length);
        return n.replace(/0/gi,"").length;
    }
    
    function transformBinary(n) {
        binaryNum = n.toString(2);
        return binaryNum;
    }
    
    while (binaryNum !== "1") {
        transformBinary(removeZero(binaryNum));
        repeatCnt++;
    };

    const answer = [repeatCnt, removeZeroCnt];
    
    return answer;
}
profile
안 되는 이유보다 가능한 방법을 찾을래요

0개의 댓글