일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | 6 | 7 |
8 | 9 | 10 | 11 | 12 | 13 | 14 |
15 | 16 | 17 | 18 | 19 | 20 | 21 |
22 | 23 | 24 | 25 | 26 | 27 | 28 |
29 | 30 |
Tags
- node
- javascript
- c++ using
- Expo
- GitHub
- react
- react native accessible
- CSS
- node.js
- stencil buffer
- c++ 정보은닉
- react native mac
- react native typescript
- react native typescript navigate
- 벡터와 리스트의 차이
- 리액트 네이티브 설치 오류
- react native typescript navigation
- 스탠실 버퍼 시작
- 스탠실 버퍼 튜토리얼
- 스탠실 버퍼 사용
- react native ios 기기 연결
- cyworld
- unity stencil buffer
- 리액트 네이티브 맥
- react-native
- 싸이월드
- react native 타입스크립트
- C++
- react native
- html
Archives
- Today
- Total
혀니의 이거저거 뿌시기
백준 2417 정수 제곱근 본문
728x90
2417번: 정수 제곱근
정수가 주어지면, 그 수의 정수 제곱근을 구하는 프로그램을 작성하시오.
www.acmicpc.net
여러모로 날 빡치게했던 이번 문제..
계속86까지 진행됐다가 틀렸다고 떴ㄷㅏ..
찾아보니까 부동소수점에 해당하는 케이스땜에 틀렸다고 하는것임..
파이썬은 float계산에서 오류를 많이 발생시킨다고 하는데
고정 소수점과는 달리 부동소수점은 <뜰 부, 동작할 동>
안 움직인다는게 아니고 움직이는 소수점이라는것임
사실 피자를 자를때도 정확히 8등분이 아니라 한 조각이 7.99994564352434243 등분일수 잇지 않은가
그렇기 때문에 float계산에서 사실 67108864.00000000000002423435435인데 이럴 때 파이썬에서는 메모리 보호 차원에서도 그렇고 67108864.0으로 어림짐작해서 뒤에 값을 버려 버리기 때문에 내가 짠 코드같은 경우에 오류가 날 수 있던 것.
import decimal
n = int(input())
e = decimal.Decimal(str(n))
if e.sqrt() == int(e.sqrt()):
print(int(e.sqrt()))
else:
print(int(e.sqrt()) + 1)
그럴 땐 이런 식으로 decimal.Decimal(str(n)) 처럼 쓰면 정확한 정수값이 나온다고 함.
중요한 것은
1.n을 str로 변경한 후 decimal씌울 것
2.decimal을씌운 뒤에 sqrt를 할 것
3.math.sqrt함수 대신 내장 함수 .sqrt()를 사용할 것...
이외에도 ** 0.5 한 것을 다시 ** 2해서 비교하는 등의 방법도 있더라..
일단 부동소수점을 알아두는 것에 의의를 두는 것으로 하자.
728x90
'알고리즘 공부(C++)' 카테고리의 다른 글
백준 1935 후위 표기식2 ( stack ) (0) | 2022.09.05 |
---|---|
백준 1874 스택 수열 (0) | 2022.09.04 |
백준 1158 요세푸스 문제 - 큐 (0) | 2022.09.03 |
백준 10816 숫자카드 2 - 딕셔너리 (0) | 2022.09.02 |
백준 1764 듣보잡 - 차집합 (0) | 2022.09.02 |