별로 어려울 건 없는 문제입니다. \(q^2\geq n\)인 자연수 q를 구하면 됩니다.
예를 들면 n=8인 경우 제곱근이 2.x이므로 답은 3이고, n=9인 경우 제곱근이 3이니까 답이 3입니다
결국 답은 ceil(sqrt(n))인데요, 실수연산은 오차가 발생하니 sqrt(n)이 정수인지 직접 확인해줘야 합니다. sqrt(n)^2 == n의 여부를 체크해주면 됩니다.
#include <cmath>
#include <iostream>
using namespace std;
using ull = unsigned long long;
int main() {
ios::sync_with_stdio(false);
cin.tie(nullptr);
#ifndef ONLINE_JUDGE
freopen("input.txt", "r", stdin);
#endif // ONLINE_JUDGE
ull n;
cin >> n;
ull q = (ull)sqrt(n);
cout << (q * q == n ? q : q + 1);
return 0;
}
n의 범위가 2^63 미만이니 8바이트 정수형을 사용해야 합니다.
반응형
'Online Judge > 백준' 카테고리의 다른 글
[백준][C++] 20055: 컨베이어 벨트 위의 로봇 (0) | 2021.09.23 |
---|---|
[백준][C++] 1024: 수열의 합 (0) | 2021.03.19 |
[백준][C++] 10830: 행렬 제곱 (0) | 2020.10.30 |
[백준][C++] 1322: X와 K (0) | 2020.10.29 |
[백준][C++] 14719: 빗물 (2) | 2020.09.19 |