별로 어려울 건 없는 문제입니다. \(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바이트 정수형을 사용해야 합니다.

반응형