본문 바로가기

백준/실버

[백준 13706번] 제곱근 (python)

문제링크 : https://www.acmicpc.net/problem/13706

def binary_search(low, high) :
    while(1) :
        mid = (low + high) // 2
        if mid**2==n : 
            return mid
        elif mid**2>n :
            high = mid - 1
        elif mid**2<n:
           low = mid + 1
            
n=int(input())
            
print(binary_search(1, n))

이번 문제는 큰수 계산이 필요하여 C++은 너무 복잡해질 것 같아서 파이썬으로 풀었다.

푸는 방법은 sqrt()함수를 통해 쉽게 구할수도 있고 이분탐색을 통해 풀 수 있는데 공부할겸 이분탐색으로 풀었다.

조건이 맞을 때 (제곱근일 때) 탈출하는 조건으로 무한루프를 돌고, low값과 high값의 mid 값을 기준으로 low 범위 및 hight 범위를 계속해서 반으로 줄여가며 탐색한다.