본문 바로가기
코딩테스트/Codility

[C언어 풀이] Codility - Lessons 1, (Iterations) BinaryGap

by Hwan2 2019. 2. 16.
반응형

이 문제는 Codility 사이트에서 확인하고 문제를 풀 수 있습니다.

https://www.codility.com/

 

 

 

 

문제.

 

 

 

설명

 

 

쉽게 설명하자면 정수N을 2진수로 표현했을때 1과 1사이의 0의 Gap 즉, 0의 갯수를 구하는 문제 입니다.

단, 1과 1사이의 0의 갯수 중 가장 긴 값을 반환해야 합니다.

 

ex)

10000001001 -> 6

100000 -> 0(1과 1사이의 0의 갯수가 아님으로)

111110 -> 0(마찬가지)

1011 -> 1

1010101 -> 1

 

이정도 예시와 결과면 충분히 이해하셨으라 생각합니다.

 

저는 C언어로 문제를 풀었고 앞으로도 C로 풀 생각입니다.

 

 

 

소스코드

int solution(int N) {
    int num = 0, count = 0, flag = 0, result = 0;

    do {
        num = N % 2;
        N /= 2;

        if (num == 1)
            flag++;
         
        if(flag == 1 && num == 0){
            count++;
        }else if(flag == 2){
            if(result < count){
                result = count;
                count = 0;
                flag = 1;
            }else{
                count = 0;
                flag = 1;
            }
        }
    } while (N > 0);

    return result;
}
 

 

저는 flag를 이용해 1을 만남 시점에서 count를 세게 했으며 flag가 2가 되면 초기화 하는식으로 했습니다.

do ~ while() 문을 통해 2진수의 마지막 자릿 수 까지 계산하도록 했습니다.

 

 

 

결과

 

 

https://app.codility.com/demo/results/trainingBH5FV5-DWT/

 

반응형

댓글


스킨편집 -> html 편집에서