별로 어려울 건 없는 문제입니다. \(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