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

DongEun·2023년 5월 29일
1
post-thumbnail

[level 2] 다음 큰 숫자 - 12911

문제 링크

문제 해설

성능 요약

메모리: 33.4 MB, 시간: 0.03 ms

구분

코딩테스트 연습 > 연습문제

채점결과

Empty

문제 설명

자연수 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)입니다.

풀이과정

조건을 보고 제가 생각한 방법은
1. 무조건 입력값보다 크다 => n + ?
2. 2진수로 변환했을때 1의갯수가 같다 => 1의 갯수 비교

반복문을 계속 돌리기에 비효율적일수도 있지만
생각했던방법은 1을 기준으로 split을 하게되면 같은 길이의 배열이 나올거라 생각하게되었고
count를 계속 증가시켜 입력받은값과 증가된 값의 배열의 길이를 비교하였고
가장 작은수였기때문에 배열의 길이가 일치하게되면 return으로 반복문을 빠져나왔습니다.

나의 답안

function solution(n) {
    let answer = 0;
    let count = 0;
    let binary = n.toString(2).split('1');
    while(true) {
      count++;
      const num = (n + count).toString(2);
      if(binary.length === num.split('1').length) {
        return parseInt(num,2);
      }
    }
}
solution(15);
profile
다채로운 프론트엔드 개발자

0개의 댓글