[JavaScript][Programmers] 다음 큰 숫자

조준형·2021년 8월 15일
0

Algorithm

목록 보기
74/142
post-thumbnail

🔎 다음 큰 숫자

❓ 문제링크

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

📄 제출 코드

function solution(n) {
    let answer = n + 1;
    let binary = n.toString(2);
    let oneCnt = 0;
    binary.split('').forEach(el => {
        if (el == '1') oneCnt++;
    });

    while (answer > n) {
        let answerOneCnt = 0;
        let binaryAnswer = answer.toString(2);
        binaryAnswer.split('').forEach(el => {
            if (el == '1') answerOneCnt++;
        });

        if (oneCnt == answerOneCnt) break;
        answer +=1;
    }
    
    return answer;
}

let n = 78;
console.log(solution(n));

처음에 어떻게 찾지 하다가 먼저 n을 2진수로 바꾸고, 1갯수를 세서 n을 하나씩 증가시키면서 2진수바꾸고, 1개수 세서 1갯수가 일치하면 답을 도출해내는 방식으로 생각했다.
혹시나 시간초과나 효율성이 걸리지 않을까 했지만 안 걸려서 다행이다.

toString(2)로 2진수를 만들어, 글자가 1이면 oneCnt를 증가.
answer에 먼저 n+1해서 다음 숫자와 비교할 준비를 함.
answer도 toString(2)로 2진수바꾸고, forEach()를 이용해 1의 갯수를 센다.
마지막에 oneCnt와 answerOneCnt가 다르면 answer를 1증가시켜 다시 계산하고, 같으면 반복을 마치고 answer를 리턴한다.

🎲 다른 코드

다른 사람들의 코드에서는 1의 개수를 구할 때 정규표현식이나 filter를 사용해 구현하였다.
정규표현식

let oneCnt = binary.match(/1/g).length;

filter

let oneCnt = binary.split('').filter(el => el == '1').length;

까먹지 말자.

📘 참고

https://velog.io/@sso/프로그래머스-JavaScript-다음-큰-숫자

profile
깃허브 : github.com/JuneHyung

0개의 댓글