NIRVANA
[level 1] 정수 제곱근 판별 본문
문제
임의의 양의 정수 n에 대해, n이 어떤 양의 정수 x의 제곱인지 아닌지 판단하려 합니다.
n이 양의 정수 x의 제곱이라면 x+1의 제곱을 리턴하고, n이 양의 정수 x의 제곱이 아니라면 -1을 리턴하는 함수를 완성하세요.
문제 풀이 접근법1
1) sqrt()함수를 사용하여 n에 루트를 씌운 값을 저장한다.
2) n과 sqrt함수로 반환 받은 √n을 나눈다.
3) 2의 나머지가 나누어 떨어진다면 어떠한 양의 정수 x의 제곱근이므로 n+1의 제곱한 값을 반환한다.
4) 2의 나머지가 나누어 떨어지지 않는다면 어떠한 양의 정수 x의 제곱근이 아니므로 -1을 반환한다.
import math
def solution(n):
answer = 0
sqrt_n = math.sqrt(n)
if n % sqrt_n == 0:
answer = int(pow(sqrt_n+1, 2))
else:
answer = -1
return answer
다른 분들 풀이
def nextSqure(n):
sqrt = n ** (1/2)
if sqrt % 1 == 0:
return (sqrt + 1) ** 2
return 'no'
자연수 n에 1/2를 제곱하면 루트를 씌운 것과 같다는 생각을 왜 못했지??
math라이브러리를 import할 필요도 없다는 점에서 놀랐다.
그리고 양의 정수 x의 제곱근이면 1로 나누었을 때 소수점이 없으므로 0이 나오고, 아닐 경우에는 소수점이 있으므로 나머지가 존재하는 점을 사용해서 제곱근을 판별한 점도 놀랐다.
def nextSqure(n):
return n == int(n**.5)**2 and int(n**.5+1)**2 or 'no'
# 아래는 테스트로 출력해 보기 위한 코드입니다.
print("결과 : {}".format(nextSqure(121)));
return에 and와 or 연산자도 사용된다는 점이 놀라웠다!
'Coding test(Python3) > Programmers' 카테고리의 다른 글
[level 1] 정수 내림차순으로 배치하기 (0) | 2023.07.09 |
---|---|
[level 1] 문자열을 정수로 바꾸기 (0) | 2023.07.07 |
[level 1] 자연수 뒤집어 배열로 만들기 (0) | 2023.07.07 |
[level 1] 문자열 내 p와 y의 개수 (0) | 2023.07.06 |
[level 1] x만큼 간격이 있는 n개의 숫자 (0) | 2023.07.06 |