한 걸음씩

[프로그래머스][JS] 다음 큰 숫자 본문

Programmers

[프로그래머스][JS] 다음 큰 숫자

winter17 2023. 6. 29. 16:00

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

 

프로그래머스

코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.

programmers.co.kr

풀이 과정

function solution(n) {
    const nBinary = n.toString(2)
    const nCnt = [...nBinary].filter(item => item === '1').length
    // n보다 큰 자연수 & 2진수로 변환시 n의 갯수가 같을 것
    for (let i = n + 1; i <= 1000000; i++){
        const findNum = i.toString(2)
        const findCnt = [...findNum].filter(item => item === '1').length
        if (findCnt === nCnt){
            return i
        }
    }
}

문제를 풀기 위한 조건 3가지가 있다.

1. n 보다 큰 수

2. n 보다 큰 수의 이진수의 1의 개수와 n의 이진수의 1의 개수가 같을 것

3. n 보다 큰 수는 만족하는 수들 중 가장 작은 수 일 것

 

위의 조건을 만족할 수 있도록 toString메서드와 filter, length 메서드를 사용했다.

toString메서드는 해당 수를 이진수로 변환할 때 사용하고

filter는 이진수에서 1만 찾아서 length 메서드로 개수를 세는 방식을 사용했다.

 

n 보다 큰 수를 찾기 위해서 n + 1 이상 1000000 이하까지 범위를 잡았다. 1000000은 제한 사항에 제시한 수 범위이다.

반복을 하면서 나오는 수들을 이진수로 변환하고 필터링해서 1의 개수를 세는 방식을 사용했는데

반복문 마지막에 n과 n보다 큰 수의 1의 개수가 같은 경우 반환하고 종료할 수 있도록 로직을 작성했다.


리뷰

최근에 풀어본 문제 중에서 시간도 안들이고 쉽게 푼 것 같다.