프로그래머스 | 2진수에서 1 값만 누적하기

chaen·2024년 2월 7일
post-thumbnail

📌 문제

문자 n이 주어질 때, 0부터 n을 2진수화하여 1의 값을 모두 더한 후 출력하는 프로그램을 구현하세요.

✨ 해결 방법

우선 문자를 2진수로 바꾸는 방법은 toString(2)을 사용하는 것입니다.
범위가 0부터 n 까지이므로 for문으로 순회하며 찾아야 하며, 문자열에서 1만 필터링합니다. 숫자 1은 특성 상 문자열의 길이가 해당 값의 반복횟수와 같습니다. (11 => 2, 111 => 3) 따라서 길이값을 누적하면 쉽게 구할 수 있습니다.

💻 solution 1

function solution(n) {
    let answer = 0;
    
    for (let i = 0; i <= n; i++) {
        const arr = i.toString(2).split('').filter(e => e === '1');
        answer += arr.length;
    }

    return answer;
}

0부터 n까지 2진수화를 하면 0은 0, 1은 1, 2는 10, 3은 11.. 이 됩니다. 따라서 const arr = i.toString(2).split('') 까지 진행하면 [[0], [1], [10], [11], ...] 이 될 것입니다. 이를 1만 놔두고 필터링하니 [], [1], [1], [11]... 이 되고, 각 길이는 0, 1, 1, 2... 등이 되겠습니다. 따라서 answer에 그 값들을 모두 더해 누적하면 됩니다.
answer 값은 위와 같이 간단하게도 구할 수 있지만, reduce 값을 통해서도 구할 수 있습니다.

0개의 댓글