[Codility] Lesson1. Iterations-BinatyGap C언어 풀이
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인지를 파악하여 숫자를 세어주었다.