[JS][Lv.2][다음 큰 숫자]

비슈·2023년 6월 27일
0

코딩테스트준비[JS]

목록 보기
3/11

https://school.programmers.co.kr/learn/courses/30/lessons/12911

문제는 다음과 같다

  1. 주어진 자연수보다 큰 수 중에
  2. 둘다 이진수로 변환했을때 1의 갯수가 같은 수
  3. 그것들중 가장 작은 수

solution

당연히 처음에는 반복문을 써주면 좋겠다고 생각이 들었고, 바로 정답판정을 받았다.

function solution(n) {
    let cnt = oneLength(n);
    for(let i = n+1; i<=1000000;i++){
        if(cnt=== oneLength(i)){
            return i.toString(10)/1;
        }
    }
}
function oneLength(n){
    return n.toString(2).split('').filter((element) => element == '1').length;
}

OneLength(n)라는 함수는 2진수로 변환후 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);
}

너무 깔끔해서 그만 정신을 잃을뻔했다.

n.toString(2).match(/1/g).length

이것은 동일하게 2진법 변환후 filter대신 match(/1/g)를 통해서 1의 갯수를 그대로 세어주는 정규식이고

? a : solution(n,a+1);

이거를 새로운 수 , 주어진 수를 비교한 후 같다면 a , 그것이 아니라면 다시 a에 +1을 한채로 다시 돌아가는 재귀방식이었다.

문제를 풀때마다 정규식이 굉장히 자주 요구되는 것 같으니 꾸준히 이럴대마다 채워나가야할 것 같다.

profile
개발자 준비하기

0개의 댓글