문제링크 : 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 범위를 계속해서 반으로 줄여가며 탐색한다.
'백준 > 실버' 카테고리의 다른 글
[백준 2841번] 외계인의 기타 연주 (C++) (0) | 2023.02.05 |
---|---|
[백준 25644번] 최대 상승 (C++) (0) | 2023.02.05 |
[백준 3135번] 라디오 (C++) (0) | 2023.02.05 |
[백준 5177번] 출력 형식이 잘못되었습니다 (C++) (0) | 2023.02.05 |
[백준 14494번] 다이나믹이 뭐에요? (C++) (0) | 2023.02.05 |