자연수 n이 주어졌을 때, n의 다음 큰 숫자는 다음과 같이 정의 합니다.
예를 들어서 78(1001110)의 다음 큰 숫자는 83(1010011)입니다.
자연수 n이 매개변수로 주어질 때, n의 다음 큰 숫자를 return 하는 solution 함수를 완성해주세요.
n | result |
---|---|
78 | 83 |
15 | 23 |
입출력 예#1문제 예시와 같습니다.입출력 예#215(1111)의 다음 큰 숫자는 23(10111)입니다.
💡 문제풀이 과정
number.toString(2)
을 통해 2진수로 변환해주고,‘1’
들만 걸러내서 그것들의length
를 구한다. 그러면 해당 숫자에 1이 몇 개인지 알 수 있다. 문자열에서 1만 걸러내는 방법으로는match()
혹은split()
과join()
등을 조합하여 사용할 수 있겠다. 아래 코드 참고 ⬇️
const binary = n.toString(2).match(/1/g).length; // const binary = n.toString(2).split(0).join("").length;
- 다음은,
while()
문을 사용하여 n을 1씩 더해가다가, 2진수로 변환한 숫자에서의 1의 개수가 같아지면 리턴한다.
while (true) { n++; if (binary == n.toString(2).match(/1/g).length) return n; }
- 2번 답안: 다른 사람의 풀이로 재귀 함수를 통해 풀이했다.
✅ 답안 #1
function solution(n) {
const binary = n.toString(2).match(/1/g).length;
// const binary = n.toString(2).split(0).join("").length;
while (true) {
n++;
if (binary == n.toString(2).match(/1/g).length) return n;
}
}
✅ 답안 #2
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);
}