C언어를 이용한 Binary search가 않되요

조회수 726회

include

int arr[5] = { 0 };

int main() { int n = 0, q = 0, x = 0; int a = 0; int r = 0, l = 0; int i = 4;

n = 5;
r = (n - 1);
q = 10;
for (int j = (n - 1); j>(-1); j--)
{
    arr[j] = 10 + 10 * i;
    printf("arr[%d] = %d\n", j, arr[j]);
    i--;
}

for (int k = 0; k<q; k++)
{
    x = 10 + 10 * k;
    printf("x=%d  ", x);

    while (r >= l)
    {
        int m = ((l + r) / 2);
        if (x == arr[m])
        {
            a = 1;
            break;
        }
        if (x < arr[m])
            r = m - 1;
        else
            l = m + 1;
    }

    if (a == 1)
        printf("YES\n");
    else
        printf("NO\n");

    a = 0;
}

return 0;

}

다음과 같은 소스코드를 사용했더니 30부터 NO가 출력이 됩니다ㅜㅜ 이유를 알 수 있을 까요?

  • (•́ ✖ •̀)
    알 수 없는 사용자

1 답변

  • 2번째 for loopㅇ서 rl이 초기화되지 않네요.

    #include <stdio.h>
    
    int arr[5] = { 0 };
    
    int main() {
        int n = 5, q = 10;
        int a = 0;
    
        for(int i=0; i<n; i++)
        {
            arr[i] = 10 + 10 * i;
        }
    
        for (int k = 0; k < q; k++)
        {
            int r = n-1, l = 0; // for문 처음에 r, l 초기화해줌.
            int x = 10 + 10 * k;
            printf("x=%d  ", x);
    
            while (r >= l)
            {
                int m = ((l + r) / 2);
                if (x == arr[m])
                {
                    a = 1;
                    break;
                }
                if (x < arr[m])
                    r = m;
                else
                    l = m + 1;
            }
    
            if (a == 1)
                printf("YES\n");
            else
                printf("NO\n");
    
            a = 0;
        }
    
        return 0;
    
    }
    
    • (•́ ✖ •̀)
      알 수 없는 사용자

답변을 하려면 로그인이 필요합니다.

프로그래머스 커뮤니티는 개발자들을 위한 Q&A 서비스입니다. 로그인해야 답변을 작성하실 수 있습니다.

(ಠ_ಠ)
(ಠ‿ಠ)