자연수 n이 주어졌을 때, n의 다음 큰 숫자는 다음과 같이 정의 합니다.
예를 들어서 78(1001110)의 다음 큰 숫자는 83(1010011)입니다.
자연수 n이 매개변수로 주어질 때, n의 다음 큰 숫자를 return 하는 solution 함수를 완성해주세요.
function solution(n) {
const filteredN = n
.toString(2)
.split("")
.filter((el) => el === "1").length;
let i = n + 1;
while (true) {
const filteredI = i
.toString(2)
.split("")
.filter((el) => el === "1").length;
if (filteredI === filteredN) {
return i;
}
i++;
}
}
기본적인 풀이방식이라고 생각한다. 2진수로 변환한 n의 1의 갯수를 먼저 찾아준 다음, 조건에 맞는 숫자가 나올 때까지 n에서 숫자가 1씩 커지는 반복문을 돌려 똑같이 2진수로 변환한 다음 1의 갯수를 찾아, n의 1의 갯수와 동일할 경우 i를 return 해주고 아닐 경우에는 i를 1 더해주어 반복문이 이어지도록 했다.
정규식으로 쉽게 푼 풀이가 있어 가져와봤다.
function solution(n,a=n+1) {
return n.toString(2).match(/1/g).length == a.toString(2).match(/1/g).length ? a : solution(n,a+1);
}
굳이 필터같은 복잡한 걸 거치지 않아도 쉽게 풀 수 있는 방법이기에 나도 기회가 된다면 정규식을 사용한 문제들을 풀어보고 싶다는 생각이 들었다.