Coding-Test

[코딜리티]Binary-Gap

갸릉o 2022. 2. 26. 16:59

문제 : Binary Gap 구하기

Input 값 N이 주어졌을때 , N을 이진 변환 한 값 중 1사이 0의 갯수를 구하라. 

구해진 binary gap 중 가장 큰 값을 return 해 주면 된다.

N : 1 - 2,147,483,647 사이의 정수

ex) input 1 : 5,204 ( 0b1010001010100 )

     binary_gap1  : 3

     input 2 : 1412 (0b1010000100)

     binary_gap 2 : 4

#include <stdio.h>

int solution(int N) 
{
    int gap = 0;
    int length = 0;
    int result = 0;
    int flag = 0;
    int status_old = 0;
    int GapLoc = 0;

    result = N;
    while(1)
    {
        result = result/2;
        length++;
        if(result == 0)
        {
            break;
        }
    }

    for(int i = 0; i<length;i++)
    {
        int status = (N>>i)&(0x01);
        if((status == 0)&&(status_old == 1))
        {
            flag = 1;
            GapLoc = 0;
        }
        else if((status == 1)&&(status_old == 0))
        {
            flag = 0;
            if(gap<GapLoc)
            {
                gap = GapLoc;
            }
        }
        else
        {
            /* hold flag */
        }
        status_old = status;

        if(flag == 1)
        {
            GapLoc++;
        }
    }
    printf("length : %d \n",length);
    printf("binaray gap : %d",gap);

    return gap;
}