본문 바로가기

공부/알고리즘

Codility - Lesson 1 : Iterations

  Codility의 제일 처음 문제라서 확실히 쉬웠다.

 

  문제를 보고나서 제일 먼저 고려한 사항은

 1. 입력 받는 정수 N의 범위는 1~21억이므로 Bit Integer에 대한 고려는 할 필요가 없음

 2. number type인 N을 string으로만 빠르게 변환할 수 있으면 1과 1 사이에 0이 제일 많은 경우는 O(n)으로 탐색이 가능할 것이라 판단

 3. 1과 1사이에 0이 없는 경우에 대해서만 예외 처리를 해주면 되겠네?

 였다.

 

 1번은 구글링을 통해 (N >>> 0).toString(2)로 간단하게 해결이 가능했고,

 2번은 for문 하나로 maxGap과 currentGap 변수를 이용해 해결했다.

 3번은 return에 3항 연산자로 처리했고.

 

 코드는 아래와 같다.

 

function solution(N) {
    const binary = (N >>> 0).toString(2);
    let maxGap = Number.MIN_VALUE;
    let currentGap = 0;

    for (let index = 0index < binary.lengthindex += 1) {
        if (binary.charAt(index) === '1') {
            if (maxGap < currentGap) {
                maxGap = currentGap;
            }

            currentGap = 0;
        } else {
            currentGap += 1;
        }
    }

    return maxGap === Number.MIN_VALUE ? 0 : maxGap;
}

 

  결과

 

  아래에 있는 것들 하나 둘 씩 찍먹 해보고 있는데 어렵더라. 걱정이다.