본문 바로가기
기초다지기/JS 코딩테스트

javascript 조건에 맞는 수 찾기

by 김빵그 2023. 11. 3.

문제

자연수 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
    }
}