https://www.acmicpc.net/problem/2417

문제
정수가 주어지면, 그 수의 정수 제곱근을 구하는 프로그램을 작성하시오.
입력
첫째 줄에 정수 n이 주어진다. (0 ≤ n < 263)
출력
첫째 줄에 q2 ≥ n인 가장 작은 음이 아닌 정수 q를 출력한다.
풀이
이분탐색을 사용해서 풀이했다.
n = int(input())
left, right = 0, n
while left <= right:
mid = (left + right) // 2
val = mid ** 2
if n <= val:
ans = mid
right = mid - 1
else:
left = mid + 1
print(ans)
문제에서의 q의 역할을 mid가 임시적으로 수행한다.
만약 mid^2이 n 이상이라면 조건을 충족하므로 ans에 mid의 값을 저장한다. 조건을 충족했지만, 우리는 조건을 충족하면서 '가장 작은' 정수를 찾아야 하므로 right를 mid - 1로 줄인 후 다시 검사한다.
반대로 조건을 충족하지 않는다면 mid 값이 더 커져야 하므로 left를 증가시킨다.
'Coding Test > Problems' 카테고리의 다른 글
| [BOJ | Python] 2343번: 기타 레슨 (0) | 2025.01.31 |
|---|---|
| [BOJ | Python] 2512번: 예산 (1) | 2025.01.31 |
| [BOJ | Python] 2776번: 암기왕 (0) | 2025.01.31 |
| [BOJ | Python] CD (0) | 2025.01.26 |
| [BOJ | Python] 1337번: 올바른 배열 (1) | 2025.01.26 |