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

정호·2023년 6월 2일
0

문제 풀이

목록 보기
23/60

문제 링크

1️⃣ 문제 설명

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

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

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

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


2️⃣ 제한 사항

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

3️⃣ 입출력 예

4️⃣ 나의 풀이

function countOne(num) {
    let count = 0, ejin = num.toString(2).split('');
    for(let i = 0; i < ejin.length; i++) {
        if (ejin[i] == 1) { count++; }
    }
    return count; 
}

function solution(n) {
    let testNum = n;
    while(true) {
        testNum++; 
        if(countOne(testNum) == countOne(n)) return testNum;
    }
}
  • countOne함수: 자연수를 입력받고 2진수로 변환 후 1의 개수를 세는 함수

  • solution함수: 반복문과 countOne함수로 n의 1의 개수 비교, 일치하는 값을 찾았을때 스탑하는 함수

근데 너무 줄줄이 풀어서 쓴 거 같아서 다른 사람의 풀이를 보고 충격먹음

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
    }
}

❖ match

match() 메서드는 문자열이 정규식과 매치되는 부분을 검색한다.

regexp : 정규식 개체,RegExp가 아닌 객체 obj가 전달되면, new RegExp(obj)를 사용하여 암묵적으로 RegExp로 변환됩니다. 매개변수를 전달하지 않고 match()를 사용하면, 빈 문자열:[""]이 있는 Array가 반환됩니다.

결과값

문자열이 정규식과 일치하면, 일치하는 전체 문자열을 첫 번째 요소로 포함하는 Array를 반환한 다음 괄호 안에 캡처된 결과가 옵니다. 일치하는 것이 없으면 null이 반환됩니다.

profile
열심히 기록할 예정🙃

0개의 댓글