본문 바로가기

프로그래밍 언어/Javascript

[Javascript/Codility] Lesson 1) Iterations : BinaryGap

[Codility] Lesson 1) Iterations : BinaryGap


문제 

파라미터로 주어진 정수 N을 이진수로 했을 때, 1 사이의 연속된 0 의 최대 길이를 반환하는 문제이다. 

예를 들어 N=9 인 경우, 이진수로 변환하면 1001 이고 1 사이의 연속된 0 의 길이는 2 이다. 그러나 N=8인 경우, 1000에서는 1사이에 있는 0은 없기 때문에 0을 반환해야 한다. 

 

내가 푼 코드 

function solution(N) {

	// 파라미터 바이너리로 바꾸기 
    const bin = N.toString(2);
    // 연속된 0의 최대 길이 
    let result = 0;
    // 연속된 0의 길이를 임시로 저장할 변수 
    let gap;

	// 이진수 처음부터 for 문 돌리기 
    for (n of bin){
    	// 1을 만나면 gap을 0으로 초기화하는데 그 전에 gap이 result보다 크면 그 값으로 갱신후 gap reset
        if (n==1){
            if(gap > result){
                result = gap;
            }
            gap = 0;
        }
        // 0이면 gap을 증가시킴
        else if (n==0){
            gap++;
        }
		
        // 앞으로 확인할 이진수의 남은 길이보다 result가 더 크다면 더 확인할 필요가 없으므로 for 문 종료 
        if (bin.length - bin.indexOf(n) < result){
            break;
        }

    }

    return result;

}

 

재귀로 풀어도 될 것 같다..?