Programmers 다음 큰 숫자

cptkuk91·2022년 9월 10일
1

Algorithm

목록 보기
93/161

문제

자연수 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 이하의 자연수 입니다.

입출력 예

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

풀이

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

toString을 통한 이진법 변환과 match를 사용할 줄 알면 쉽게 풀 수 있는 문제입니다.
우선 first를 통해 match(/1/g)까지 코드를 작성하면 ['1', '1', '1', '1'] 결과를 알 수 있습니다. 이 상태에서 .length를 통해 4개의 1값을 얻은 후, while(true)문을 통해서 n++을 하면 n값이 계속해서 증가합니다.
증가한 n값에 대해서 다시 match(/1/g)를 활용해 1값을 얻고 이에대한 length 값이 같아질 때 문제가 요구하는 결과값을 출력할 수 있습니다.

profile
메일은 매일 확인하고 있습니다. 궁금하신 부분이나 틀린 부분에 대한 지적사항이 있으시다면 언제든 편하게 연락 부탁드려요 :)

0개의 댓글