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)
'백준 파이썬 코딩' 카테고리의 다른 글
백준 17140 이차원 배열과 연산 파이썬 *추가* (0) | 2022.08.15 |
---|---|
백준 17140 이차원 배열과 연산 파이썬 (1) | 2022.08.15 |
백준 10986 나머지 합 파이썬 (0) | 2022.08.13 |
백준 2573 빙산 파이썬 (DFS) (0) | 2022.08.13 |
백준 16139 인간-컴퓨터 상호작용 파이썬 (0) | 2022.08.13 |