Notice
Recent Posts
Recent Comments
Link
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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
- 빅세타
- 랜덤 순서 배열
- 빅오메가
- matrix trnasformations
- 빅오 표기법
- 알고리즘 분석의 실례
- 일차변환
- nonhomogeneous linear system
- Big-O 예제
- matrix-vector product
- Big-Oh notation
- homogeneous linear system
- solutions of matrix equation
- python
- 이진 탐색
- Big Omega
- one-to-one
- recursive algorithms
- Big-Oh 예제
- 배열 섞기
- 코틀린 시작하기
- linear dependence
- 코틀린 Hello World!
- Big Theta
- NumPy
- nontrivial solution
- 재귀함수
- itertools
- trivial solution
- matrix fo a linear transformation
Archives
- Today
- Total
코딩 연습
(파이썬) 완전제곱수 판별 본문
반응형
처음으로 파이썬에서 완전제곱수를 판별하는 함수를 만들려고 단순히 제곱근이 정수이면 된다고 생각해었다. 그래서 다음과 같은 함수를 만들었었다.
def issquare(n):
temp = n ** 0.5
if int(temp) == temp:
return True
else:
return False
그런데 이게 제대로 작동을 안하는 것이었다.
\(89011483755109777\) 은 완전제곱수가 아닌데도 제곱근이 정수로 출력되는 것을 볼 수 있다. 소숫점 이하가 아주 작을 경우 버림을 해버리기 때문에 발생하는 일이다. 따라서 이것만으로는 완전제곱수인지 판단하기 어려우므로, 제곱근을 다시 제곱해서 원래의 수가 나오는지 확인해야 한다.
def issquare(n):
temp = n ** 0.5
if int(temp) == temp:
if temp ** 2 == n:
return True
return False
이렇게 하면 제대로된 결과를 얻을 수 있다. 그럼에도 불구하고 뭔가 깔끔해 보이지 않는다. 그래서 정리한 함수는 다음과 같다.
def issquare(n):
return int(n ** 0.5) ** 2 == n
깔끔해 보인다.
반응형
'Python' 카테고리의 다른 글
(파이썬) 분수의 표현과 그 연산 (0) | 2016.03.15 |
---|---|
(파이썬) 최대공약수 구하기 (0) | 2016.03.15 |
(파이썬) 소수판정 (0) | 2016.03.15 |
(파이썬) 소인수 분해 (0) | 2016.03.15 |
(파이썬) 모든 조합의 경우 나열하기 (0) | 2016.03.15 |
Comments