본문 바로가기
Developer/Algorithm

프로그래머스 코딩테스트 연습 Level 2 - 다음 큰 숫자 (JavaScript)

by 김씩씩 2022. 5. 23.

프로그래머스 코딩테스트 연습 Level 2 - 다음 큰 숫자 (JavaScript)

 

Programmers(프로그래머스)의 코딩테스트 연습문제 Level 2 중,

[다음 큰 숫자] 문제를 JavaScript를 사용하여 해결해 보도록 하겠습니다.

 

문제

문제 설명

자연수 n이 주어졌을 때, n의 다음 큰 숫자는 다음과 같이 정의 합니다.

  • 조건 1. n의 다음 큰 숫자는 n보다 큰 자연수 입니다.
  • 조건 2. n의 다음 큰 숫자와 n은 2진수로 변환했을 때 1의 갯수가 같습니다.
  • 조건 3. n의 다음 큰 숫자는 조건 1, 2를 만족하는 수 중 가장 작은 수 입니다.

예를 들어서 78(1001110)의 다음 큰 숫자는 83(1010011)입니다.

자연수 n이 매개변수로 주어질 때, n의 다음 큰 숫자를 return 하는 solution 함수를 완성해주세요.

제한 사항

  • n은 1,000,000 이하의 자연수 입니다.

 

입출력 예

n result
78 83
15 23

 

입출력 예 설명

입출력 예#1
문제 예시와 같습니다.
입출력 예#2
15(1111)의 다음 큰 숫자는 23(10111)입니다.

 

작성한 답

solution.js

function solution(n) {
    const oneCount = n.toString(2).match(/1/g).length;
    while (n++) {
        if (n.toString(2).match(/1/g).length === oneCount) return n;
    }
}

 

설명

자연수 n을 toString(2) 를 사용해 2진수로 변환합니다.

그리고 match(/1/g)를 사용해 '1' 문자들만 뽑아내서 배열로 만들어준 다음 해당 배열의 길이를 구하여

자연수 n을 2진수로 변환했을 때의 '1' 의 개수를 구합니다.

 

그 이후로는 간단하게 생각해서 자연수 n에 1씩 더해주면서

증가된 수를 2진수로 변환했을 때의 '1'의 개수를 구한 다음

기존 자연수 n을 2진수로 변환했을 때의 '1'의 개수와 같으면 

증가시키는 중이던 자연수를 반환하여 문제를 해결할 수 있습니다.

 

 

 

도움이 되셨다면 공감, 댓글 부탁드립니다!

궁금하신 점이나 요청사항은 언제든지 말씀해주세요!

피드백도 언제나 환영입니다!

 

감사합니다.


댓글