Programmers - 다음 큰 숫자

Doodream·2021년 3월 25일
0

코딩테스트

목록 보기
9/22
post-thumbnail

💻 다음 큰 숫자


❓ 문제

https://programmers.co.kr/learn/courses/30/lessons/12911

✔️ 코드

function solution(n) {
    var nOneCount = findOneCount(n);
    var answer = 0;

    var nextN = n + 1;
    while (true) {
        if (findOneCount(nextN) === nOneCount) {
            answer = nextN;
            break;
        } else {
            nextN++;
        }
    }

    return answer;
}

function findOneCount(n) {
    var nBin = n.toString(2).split('');
    var nBinOneCount = 0;
    while (true) {
        var index = nBin.indexOf('1');
        if (index === -1) {
            break;
        } else {
            nBin.splice(index, 1);
            nBinOneCount++;
        }
    }

    return nBinOneCount;
}

❗️풀이과정

답은 n을 이진수로 표현해서 1의 갯수와 n보다 큰 가장 작은 자연수중 이진수로 표현해서 1의 갯수가 같은 n보다 큰 가장 자연수를 구하는 것이다.

nBinCount = 2진수로 표현해서 1의 갯수
nextN = n 다음 수

즉, n + 1 부터 시작해서 nBinCount를 세어서 같으면 답을 출력하면된다.

배운점

  • n.toString(2) : 이함수는 n을 이진수로 바꾼다. 2를 4나 8로 바꿀수도 있다.. 대박이다. 좀 사기적인 스킬이다.
  • n.splice(index, 1) : n이라는 배열에서 index부분을 제거한다. 원하는 원소를 제거하려면 indexOf('value')를 통해서 index값을 알아내야한다.
profile
일상을 기록하는 삶을 사는 개발자 ✒️ #front_end 💻

0개의 댓글