본문 바로가기

백준/실버

[백준 2417번] 정수 제곱근 (C++)

문제링크 : https://www.acmicpc.net/problem/2417

 

2417번: 정수 제곱근

정수가 주어지면, 그 수의 정수 제곱근을 구하는 프로그램을 작성하시오.

www.acmicpc.net

#include <bits/stdc++.h>
using namespace std;
typedef long long ll;
typedef pair<int, int> pii;
const int MAX = 987654321;

ll N;

int main()
{
    ios_base::sync_with_stdio(0); 
	cin.tie(0);

    cin >> N;

    ll tmp = sqrt(N); //제곱근 반환

    if(tmp*tmp < N) tmp++;

    cout << tmp;

    return 0;
}

 

태그에는 이분탐색이 적혀있지만, 굳이 이분탐색을 사용할 필요가 없는 문제이다.

 

sqrt 함수를 통해 간단하게 제곱근을 구할 수 있다.

하지만 실수연산에 따라 오차범위가 발생한다.

따라서 sqrt를 통해 구한 제곱근을 다시 제곱하여 N보다 작다면 구했던 제곱근에 + 1을 해주어야 한다.