Contents

[Codility] Lesson1. Iterations-BinatyGap C언어 풀이

   Jun 5, 2020     1 min read     - Comments

Codility바로가기


Lesson1. Iterations(반복)

 반복이란 같은 일을 되풀이함 이라는 사전적 의미를 지니고 있습니다. 프로그래밍을 대부분의 상황에서는 같은 코딩을 반복해서 사용해야 할 부분이 있습니다.
예를 들어, Hello, World!라는 문구를 100000번을 반복 출력할 때, printf("Hello, Wolrd!");를 100000번 코딩해야 합니다.
어렵고 불가능한 일을 아니지만, 심리적으로 상당히 힘이 드는 부분입니다.
이러한 상황에서 for또는 while과 같은 프로그래밍 반복문을 사용하게 되면, 시간과 비용면에서 또한 상당한 이익을 챙길 수 있게 될 수 있을 겁니다.


1. 문제

양수 N을 2진수로 변환하여 1 사이에 있는 0의 개수를 찾으면 되는 문제이다.

예시   
N = 9(1001) (1사이에 0이 2개이므로 2를 반환해준다.)   
N = 529(1000010001) (답이 2개 이상이면, 더 큰 수인 4를 반환해준다.)   
N = 15(1111), N = 32(100000) (0이 없거나 1이 하나인 경우는 0을 반환해준다.)

2. 정답

첫번째 - 100점

int solution(int N) {
    int answer = 0, max = 0, flag = 0;
    while(N>1){
        if(N % 2){
            flag = 1;
            max = 0;
        }else if(flag){
            max++;
            if(answer < max) answer = max;            
        }
        N /= 2;
    }
    return answer;
}

10진수의 숫자 N을 2진수로 변환과 동시에 0 또는 1인지를 파악하여 숫자를 세어주었다.