본문 바로가기
프로그래머스

24/09/30 - 이진 변환 반복하기(JS)

by Jini_Lamp 2024. 9. 30.

1. 이진 변환 반복하기(https://school.programmers.co.kr/learn/courses/30/lessons/70129)

 

이번 문제는 설명이 조금 애매했다. 그래서 내가 이해한 내용을 기록할 겸 오랜만에 프로그래머스 문제를 올려보도록 하겠다.

 

먼저, 해당 문제는 0과 1로 이루어진 문자열 S가 "1"이 될 때까지 S에 계속 이진 변환을 가하는 것이다. 이때 이진 변환의 횟수와 과정에서 제거된 0의 개수를 각각 배열데 담아 결과를 반환한다.

 

여기서 잠깐 "110010101001"을 예시로 들면 다음과 같다.

 

"110010101001"에서 0을 제거하면 "111111"이 된다.

이때, "111111"의 길이는 6이 되는데, 이걸 이진으로 변환하면 "110"이 된다. 그렇다. 이진 변환 결과는 0을 제거하고, 남은 1의 길이를 다시 이진 변환한 값을 말하는 것이다.

 

문제 풀이는 다음과 같다.

function solution(s) {
    var answer = [];
    let str = s, zero = 0, one = 0, count = 0;
    
    while(1) {
        if(str === '1')
            break;
        count++;
        
        for(let i=0; i<str.length; i++) {
            if(str[i] === '0')
                zero++;
            else
                one++;
        }
        
        str = one.toString(2);  // 2진수로 변환
        one = 0;
    }
    
    answer.push(count);
    answer.push(zero);
    
    return answer;
}