https://programmers.co.kr/learn/courses/30/lessons/12911
function solution(n) {
let answer = n + 1;
let binary = n.toString(2);
let oneCnt = 0;
binary.split('').forEach(el => {
if (el == '1') oneCnt++;
});
while (answer > n) {
let answerOneCnt = 0;
let binaryAnswer = answer.toString(2);
binaryAnswer.split('').forEach(el => {
if (el == '1') answerOneCnt++;
});
if (oneCnt == answerOneCnt) break;
answer +=1;
}
return answer;
}
let n = 78;
console.log(solution(n));
처음에 어떻게 찾지 하다가 먼저 n을 2진수로 바꾸고, 1갯수를 세서 n을 하나씩 증가시키면서 2진수바꾸고, 1개수 세서 1갯수가 일치하면 답을 도출해내는 방식으로 생각했다.
혹시나 시간초과나 효율성이 걸리지 않을까 했지만 안 걸려서 다행이다.
toString(2)로 2진수를 만들어, 글자가 1이면 oneCnt를 증가.
answer에 먼저 n+1해서 다음 숫자와 비교할 준비를 함.
answer도 toString(2)로 2진수바꾸고, forEach()를 이용해 1의 갯수를 센다.
마지막에 oneCnt와 answerOneCnt가 다르면 answer를 1증가시켜 다시 계산하고, 같으면 반복을 마치고 answer를 리턴한다.
다른 사람들의 코드에서는 1의 개수를 구할 때 정규표현식이나 filter를 사용해 구현하였다.
정규표현식
let oneCnt = binary.match(/1/g).length;
filter
let oneCnt = binary.split('').filter(el => el == '1').length;
까먹지 말자.