
문자 n이 주어질 때, 0부터 n을 2진수화하여 1의 값을 모두 더한 후 출력하는 프로그램을 구현하세요.
우선 문자를 2진수로 바꾸는 방법은 toString(2)을 사용하는 것입니다.
범위가 0부터 n 까지이므로 for문으로 순회하며 찾아야 하며, 문자열에서 1만 필터링합니다. 숫자 1은 특성 상 문자열의 길이가 해당 값의 반복횟수와 같습니다. (11 => 2, 111 => 3) 따라서 길이값을 누적하면 쉽게 구할 수 있습니다.
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 값을 통해서도 구할 수 있습니다.