[TIL] 240915 (프로그래머스 다음 큰 숫자)

·2024년 9월 15일

TIL

목록 보기
160/268
post-thumbnail

🥞 오늘 한 일

  • 알고리즘 코드카타
    • 다음 큰 숫자

알고리즘 코드카타

다음 큰 숫자

문제

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

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

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

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

풀이

function solution(n) {

  const filteredN = n
    .toString(2)
    .split("")
    .filter((el) => el === "1").length;

  let i = n + 1;
  while (true) {
    const filteredI = i
      .toString(2)
      .split("")
      .filter((el) => el === "1").length;
    if (filteredI === filteredN) {
      return i;
    }
    i++;
  }
}

기본적인 풀이방식이라고 생각한다. 2진수로 변환한 n의 1의 갯수를 먼저 찾아준 다음, 조건에 맞는 숫자가 나올 때까지 n에서 숫자가 1씩 커지는 반복문을 돌려 똑같이 2진수로 변환한 다음 1의 갯수를 찾아, n의 1의 갯수와 동일할 경우 i를 return 해주고 아닐 경우에는 i를 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);
}

굳이 필터같은 복잡한 걸 거치지 않아도 쉽게 풀 수 있는 방법이기에 나도 기회가 된다면 정규식을 사용한 문제들을 풀어보고 싶다는 생각이 들었다.

profile
웹 프론트엔드 개발자

0개의 댓글