FrontEnd
Javascript
Diary
ML
CS
Django
Algorithm
AWS
Co-Work
HTML
CSS
Python
React
ReactNative

#24 알고리즘 연습 - 정수제곱근판별(Python)

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

제한 사항

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

입출력 예

n return
121 144
3 -1

입출력 예 설명

입출력 예#1 121은 정수 11의 제곱이므로, (11+1)를 제곱한 144를 리턴합니다.

입출력 예#2 3은 정수의 제곱이 아니므로, -1을 리턴합니다.

문제풀이 제곱근이라는 말때문에 잠시 겁을 먹었는데 제곱근을 판별하는 방법으로 root를 씌워서 정수가 나오냐를 확인해보면 된다
따라서 간단하게 root를 씌워서 그 값이 int인지 확인을 해주려고 하니 root로 연산된 값의 결과가 float로 출력이 되어 나오는 자료형이 아닌 나온 값의 형변환시 크기를 비교하여 같은지 (float로 나오게 되면 int로 형변환시 소수점 부분이 탈락되게 되어 크기가 달라진다)를 이용해줬다
왜냐하면 python에서의 ==은 크기가 같은지를 비교해주기 때문이다.

내 풀이 🏆

def solution(n):
    sq_root = n**(1/2)         #가독성의 편의를 위해 sqrt를 변수에 저장했다
    if int(sq_root) == sq_root:     #int로 형변환시 탈락되는 부분이있는지 if문으로 크기비교해줬다
        return (int(sq_root)+1)**2  #만약 int로 형변환을 해도 크기가 같다면 1을 더해서 다시금 제곱해준다.
    else:
        return -1

다른 풀이🏆

def nextSqure(n):
    sqrt = n ** (1/2)

    if sqrt % 1 == 0:              #이 IDEA에 유의해보자 이 IDEA는 sqrt로 바꾼 값을 가장 작은 단위인 1로 나누어 나머지로

                                    정수인지 판별을 해주는 IDEA이다. ==의 크기가 같다는 IDEA를 못떠올리면 이 방법이 더 좋아보인다.
        return (sqrt + 1) ** 2
    return -1