NIRVANA

[level 1] 정수 제곱근 판별 본문

Coding test(Python3)/Programmers

[level 1] 정수 제곱근 판별

녜잉 2023. 7. 7. 20:34

문제

임의의 양의 정수 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 연산자도 사용된다는 점이 놀라웠다!