본문 바로가기

백준 파이썬 코딩

백준 2417 정수 제곱근 파이썬

https://www.acmicpc.net/problem/2417

 

2417번: 정수 제곱근

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

www.acmicpc.net

처음 이 문제를 봤을때 그냥 제곱근을 사용하면 되겠다라고 생각해 math.sqrt 와 math.isqrt를 사용해 아래와 같이 코드를 만들었다.

import math
n=int(input())
if float(math.isqrt(n))== math.sqrt(n): #isqrt는 정수형을 내보낸다. 
    print(math.isqrt(n))#math.isqrt(n)**2==n이라는 소리니(제곱수) 그대로 출력
else:
    print(math.isqrt(n)+1)#제곱수가 아닌 제곱근이 소수를 가지므로 +1해준 뒤 출력

하지만 70대를 넘어가며 틀렸습니다가 나왔고 그 이유가 부동소수점 오차임을 알게 됐다.

그래서 코드를 완전히 갈아 엎으려던 찰나 오류가 났을때 그냥 +1을 해준 뒤 출력을 해주면 된다는 것을 깨달아 아래와 같이 코드를 수정하고 AC받았다.

import math
n=int(input())
if math.sqrt(n)**2 <n:#math.sqrt을 사용할때 부동소수점 오차가 발생한다면 math.sqrt(n)**2!=n일 것이다.
    print(int(math.sqrt(n)+1))
elif float(math.isqrt(n))== math.sqrt(n):
    print(math.isqrt(n))
else:
    print(math.isqrt(n)+1)