[Codility] Binary gap - javascript

Siri·2022년 11월 29일
0

코딩테스트

목록 보기
1/4

문제

[문제 링크]

Binary gap의 최댓값을 구하는 문제이다.
Binary gap은 이진수에서 1로 둘러싸인 연속된 0의 개수이다.

예)
1. 9는 이진수로 1001이다. binary gap은 2이다.
2. 529는 이진수로 1000010001이다. binary gap은 4와 3으로 총 2개이다.
3. 20은 이진수로 10100이다. binary gap은 1이다.
4. 15는 이진수로 1111이다. binary gap은 없다.
5. 32는 이진수로 100000이다. binary gap은 없다.

양의 정수 N이 주어진다.
가장 긴 binary gap을 반환해야한다.
binary gap이 없다면 0을 반환해야한다.

function solution(N) {
    const binaryN = N.toString(2); //2진수 문자열로 변환
    let binaryGap = 0;
    let answer = 0;
    for (let i = 1; i < binaryN.length; i++) {
        if (binaryN[i] === '0') {
            binaryGap++;
        }
        else {
            answer = Math.max(binaryGap, answer);
            binaryGap = 0;
        }
    }
    return answer;
}

binaryN[0]은 무조건 1이므로 binaryN[1]부터 검사한다.

  • 0을 만나면 binaryGap을 1씩 증가하고
  • 1을 만나면 answer에 가장 큰 binaryGap을 저장한다.

for문과 if문을 js스럽게 쓰지 않은 것 같다.
하지만 직관적으로 푼 것 같다.

0개의 댓글