OLD/Coding Test

[프로그래머스] level 1 : 정수 제곱근 판별

stranger95 2020. 2. 7. 11:10

문제 설명

임의의 양의 정수 n에 대해, n이 어떤 양의 정수 x의 제곱인지 아닌지 판단하려 합니다.
n이 양의 정수 x의 제곱이라면 x+1의 제곱을 리턴하고, n이 양의 정수 x의 제곱이 아니라면 -1을 리턴하는 함수를 완성하세요.

 

제한 사항

  • n은 1이상, 50000000000000 이하인 양의 정수입니다.

 

입출력 예

n return
121 144
3 -1

 

Solution

1
2
3
4
def solution(n) :
    sqrt = n ** (1/2)
    if sqrt % 1 == 0 : return (sqrt + 1** 2
    return -1
 
cs

 

코드해석

입력 받은 정수를 1/2 제곱하여 제곱근을 구합니다. 만약 구한 제곱근 sqrt가 정수라면(=입력 받은 정수 n이 어떤 양의 정수의 제곱이라면) 1으로 나누었을 때 나머지가 0일 것이며, 이때 sqrt에 1을 더한 값의 제곱을 반환합니다. sqrt가 정수가 아닌 실수라면 1으로 나누었을 때 0이 아닌 실수일 것이며, 이때 -1을 반환합니다.

 

다른 사람의 풀이

1
2
def solution(n) :
    return n == int(n**.5)**2 and int(n**.5+1)**2 or -1
cs

제곱근을 구한 후 제곱했을 때 자기 자신이면 and 이후의 결과를 반환하고, 그렇지 않다면 or 이후를 반환합니다.