문제
자연수 n이 주어졌을 떄 아래의 조건에 맞는 n의 다음 큰 숫자를 구하여라
1. n의 다음 숫자는 n보다 큰 자연수
2. n의 다음 숫자는 n은 2진수로 변환했을 떄 1의 갯수가 같다
3. n의 다음 숫자는 조건 1,2를 만족하는 수 중 가장 작은 수
나의 풀이
function solution(n) {
var string = n.toString(2);
var count = (string.match(/1/g) || []).length;
for(let i = n + 1 ;; i++) {
if(count === (i.toString(2).match(/1/g) || []).length){
return i;
break;
}
}
}
- string 변수에 자연수 n의 2진수로 변경
- count 변수에 match를 사용해 1이 몇개 들어있는지 알아낸다
- for 문을 사용해 루프를 돌린다
- i 는 n보다 1큰 수부터 1씩 증가
- n의 1 개수와 i의 2진수 1의 개수가 같을 때 i를 리턴후 break
다른 풀이
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);
}
- 두개의 매개변수 n과 a를 받는다
- 각각 n과 a를 2진수로 변경후 1의 개수를 비교
- n과 a의 개수가 같다면 a를 반환한다
function nextBigNumber(n) {
var size = n.toString(2).match(/1/g).length
while(n++) {
if(size === n.toString(2).match(/1/g).length) return n
}
}
'기초다지기 > JS 코딩테스트' 카테고리의 다른 글
javaScript 정수 배열에서 0 만들기 (0) | 2023.11.07 |
---|---|
javaScript 유한소수 판별하기 (0) | 2023.11.06 |
javaScript 치킨 쿠폰 (0) | 2023.11.03 |
javascript 2차원 배열 평균 순위 매기기 (1) | 2023.11.02 |
javascript 배열 조합 문제 (2) | 2023.11.02 |