C언어에서는 제곱근(square root)을 math.h의 sqrt 함수로 구할 수 있는데 sqrt 함수는 이 문제처럼 이진탐색으로 제곱근을 계산합니다.
이 문제는 sqrt함수가 왜 느린건지 컴퓨터프로그래밍1 수준에서 직관적으로 이해시켜드리기 위하여 출제한 문제입니다. 정확한 이유는 알고리즘 강의에서 시간복잡도 개념을 배울 때 이해할 수 있을거예요
sqrt(2) 범위를 구하는 규칙은 아래와 같습니다.
일단 맨 처음에
0 < sqrt(2) < 2
로 시작합니다. 0 < sqrt(n) < n은 2 이상의 모든 자연수 n에 대하여 항상 성립합니다. 조금만 생각해보면 알 수 있을테니 증명은 생략할게요
0과 2의 평균값 1은 sqrt(2)보다 작습니다. (1 < sqrt(2))
위에서 구한 식과 합치면 (0 < sqrt(2) < 2)
1 < sqrt(2) < 2 가 됩니다.
1과 2의 평균값 1.5는 sqrt(2)보다 큽니다. (1.5 > sqrt(2))
위에서 구한 식과 합치면 (1 < sqrt(2) < 2)
1 < sqrt(2) < 1.5 가 됩니다.
이 과정을 좌변, 우변 같아질 때까지 반복하여 범위를 줄여나가면 됩니다.