DataScience
[LV1] 정수 제곱근 판별 - python 본문
문제 설명
임의의 양의 정수 n에 대해, n이 어떤 양의 정수 x의 제곱인지 아닌지 판단하려 합니다.
n이 양의 정수 x의 제곱이라면 x+1의 제곱을 리턴하고, n이 양의 정수 x의 제곱이 아니라면 -1을 리턴하는 함수를 완성하세요.
제한 사항
n은 1이상, 50000000000000 이하인 양의 정수입니다.
입출력 예#1
121은 양의 정수 11의 제곱이므로, (11+1)를 제곱한 144를 리턴합니다.
입출력 예#2
3은 양의 정수의 제곱이 아니므로, -1을 리턴합니다.
입출력 예시
n | return1 |
121 | 144 |
3 | -1 |
풀이 및 코드 리뷰
내가 제출한 답
import math
def solution(number):
if math.sqrt(number) == int(number**0.5):
return (math.sqrt(number)+1)**2
return -1
- sqrt를 사용하기 위해 math 모듈을 호출하여 사용
- 조건문을 사용하여 math을 사용한 제곱근 값[방법1]과 n의 1/2승[방법2]을 한다음 정수로 바꿔준 값과 같은 경우 x+1의 제곱을 return하고 그렇지 않은 경우 조건문을 나와 -1을 return 하도록 한다.
다른 사람의 풀이1
def nextSqure(n):
sqrt = n ** (1/2)
if sqrt % 1 == 0:
return (sqrt + 1) ** 2
return -1
- 모듈을 사용하지 않고 n의 1/2승의 함수를 만들고 정수로 바꿔주는 것이 아닌 sqrt값이 n의 제곱근의 값이 맞을경우 나머지가 없지만 만약 n의 제곱근의 값이 아니라면 나머지가 float으로 표현되기 때문에 False이다.
- x가 1로 나눠지는 정수일 경우 x+1의 제곱을 return하고, 다르면 -1을 return합니다.
다른 사람의 풀이2
def nextSqure(n):
return n == int(n**.5)**2 and int(n**.5+1)**2 or -1
- n == int(n**.5) **2 : n과 n의 1/2승에 제곱한 값과 같으면(and) int(n**.5+1)**2 다르면(or) -1
참고 자료
1. 제곱근 ( [1] sqrt() / [2] **0.5 ) → math.sqrt(x)
- 제곱근 함수의 경우 pow()함수는 다르게 math 라이브러리를 import 하여야만 사용이 가능하다.
- math.sqrt(음수)가 들어올 경우 에러가 발생
2. 제곱 ( [1] pow() / [2] **2 ) → math.pow(x, y) / pow()
- 제곱의 함수의 경우 math.pow()와 pow()가 둘다 가능하다.
- pow()의 경우 기본 형태는 pow(x,y) 이며, 즉 x의 y승(x의 y번 제곱)을 뜻한다.
- sqrt(음수, float)가 들어올 경우 에러가 발생
3. 소스코드 예제
import math
n = 16
# 제곱근[math.sqrt(x)]
result1 = math.sqrt(n)
print(result1)
# 제곱근[n**0.5]
result2 = n**0.5
print(result2)
# 제곱[pow() / math.pow()]
result3 = pow(n)
result4 = math.pow(n)
print(result3)
print(result4)
# 제곱[n**2]
result5 = n**2
print(result5)
결과
'Coding Review > programmers' 카테고리의 다른 글
[LV0] 숨어있는 숫자의 덧셈 (2) - Python (0) | 2022.10.10 |
---|---|
[LV2] 위장 - python (해시) (2) | 2022.10.05 |
[LV1] 완주하지 못한 선수 - Python(해시) (0) | 2022.10.04 |
[LV0] 중복된 문자 제거 - Python (0) | 2022.10.04 |
[LV0] 세균 증식 - Python (0) | 2022.10.03 |