백준 온라인 저지 2417번 정수 제곱근
문제 출처 : https://www.acmicpc.net/problem/2417
2417번: 정수 제곱근
문제 정수가 주어지면, 그 수의 정수 제곱근을 구하는 프로그램을 작성하시오. 입력 첫째 줄에 정수 n이 주어진다. (0 ≤ n < 263) 출력 첫째 줄에 q2 ≥ n인 가장 작은 음이 아닌 정수 q를 출력한다. 예제 입력 1 복사 122333444455555 예제 출력 1 복사 11060446...
www.acmicpc.net
풀이 과정
단순하게 0부터 n의 제곱근까지 계산하는 완전탐색을 사용하면 n의 값이 너무 크기 때문에 시간초과가 나게 됩니다.
따라서 연속되는 값들 사이에서 값을 찾을 때 사용되는 이진탐색을 통해 값을 찾았습니다.
이진탐색으로 값을 찾고나서 그 값의 제곱이 입력값과 같으면 그대로 출력하면 되고, 작다면 +1을 해줘서 출력해주면 됩니다.
소스 코드
#include <iostream> #include <cmath> using namespace std; int main() { long long a; cin >> a; long long s = 0; long long e = sqrt(a); long long mid; while(s <= e) { mid = (s+e) / 2; if(mid >= sqrt(a)) e = mid - 1; else s = mid+1; } if(mid *mid == a) cout << mid << endl; else cout << mid+1 << endl; }
'백준온라인저지' 카테고리의 다른 글
1238번 파티 (0) | 2019.07.18 |
---|---|
3062번 수 뒤집기 (0) | 2019.07.18 |
1991번 트리순회 (0) | 2019.01.20 |
1712번 손익분기점 (0) | 2018.09.19 |
13458번 시험 감독 (0) | 2018.09.17 |