코딩테스트

[JS] 이진 변환 반복하기

미안하다 강림이 좀 늦었다 2023. 11. 10. 17:42

 

 

난이도: Lv.2

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

 

프로그래머스

코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.

programmers.co.kr

 

 

알고리즘

1. 문자열에서 '0'을 모두 제거한다.

2. 1의 문자열 길이를 구한다.

3. 2진수 문자열로 변환한다.

4. 문자열이 '1'이 될 때까지 1 ~ 3의 과정을 반복한다.

 

 

코드

function solution(s) {
    var answer = [];
    let loopCount = 0, zeroCount = 0;

    while (s !== '1') {
        zeroCount += s.length;
        s = s.replace(/0/g, '');
        zeroCount -= s.length;
        s = s.length.toString(2);
        loopCount++;
    }

    answer.push(loopCount);
    answer.push(zeroCount);

    return answer;
}

 

 

주저리

replace('0', '')으로 했다가 처음 0 하나밖에 안지워져서 정규표현식을 썼다. 정규표현식 짱짱 편함. 10진수를 2진수로 바꾸는 코드 직접 짤 생각하니까 너모 귀찮았는데 다행히도 함수가 있었다.