algo lev-1 정수 제곱근 판별 (python)

less than 1 minute read

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

(제한: n은 1이상, 50000000000000 이하인 정수입니다)

출처 : 프로그래머스 Level1

내가 푼 풀이

처음에는 대체 왜 에러가 나지?!?!? 라며 당황해 했는데 완전 바보였던 것…… 루트 n 을 제곱하면 당연히 n 이 나오는 데 그걸 같냐고 비교 하고 있으니 제곱근 판별이 아니라 파이썬이 계산 잘하고 있는지 판별하고 있었다…… (ㅋㅋㅋㅋㅋ)

1차 시도(오답).py

def solution(n):
    import math
    num = math.sqrt(n)
    
    if n == pow(num,2) :      
   # pow(num,2) 하면 당연히 n 이 되겠지 (;;) 바보야!
        return pow(num+1, 2)
    
    return -1

정신을 차리고 다시 풀었다! math.sqrt()가 int 정수형으로 나온다면, 주어진 n은 제곱근 num을 가지고 있다는 의미가 된다.

2차 풀이.py

def solution(n):
    import math
    num = math.sqrt(n)
    
    if math.sqrt(n) == int(math.sqrt(n)) :
        return pow(num+1, 2)
    
    return -1

import math 하지 않고도 풀 수 있는 방법을 생각해봤다. pow()에서 제곱할 값을 0.5로 주거나, 그냥 (1/2) 를 곱해버리면 쉽게 해결할 수 있었다.

import math 하지 않고 푸는 법.py

def solution(n):
    num = pow(n, 0.5)
    # num = n ** (1/2)
    
    if num == int(num) :
        return (num+1)**2
    
    return -1

배운 점

1) 잠이 올 때 문제를 풀지 말자

ㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋ 후….

Categories:

Updated:

Comments