[프로그래머스][LV.1] 정수 제곱근 판별 | python3

2025. 1. 16. 13:57프로그래머스/LV.1

 

문제 링크: 정수 제곱근 판별

 

문제 설명

문제 설명

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

제한사항
- n은 1이상, 50000000000000 이하인 양의 정수입니다.

 


문제 풀이

처음엔 
def solution(n):
    answer = -1
    if type(n**(1/2)) == int:
        return (n+1)**2
    return answer​
이렇게 타입을 비교해서 하려고 햇는데 안됐다.
그래서 피티씨한테 약간의 도움을 받아서 다시 작성했다.
재곱근이 int를 씌웠을때랑 같으면 제곱근은 정수이다. 

 

내코드

def solution(n):
    answer = -1
    if (n**0.5) == int(n**0.5):
        return (n**0.5+1)**2
    return answer

 

 


더보기

다른사람풀이

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

    if sqrt % 1 == 0:
        return (sqrt + 1) ** 2
    return -1
    -----------------------------------
def nextSqure(n):
    from math import sqrt
    return -1 if sqrt(n) % 1 else (sqrt(n)+1)**2

제곱근을 구해서 1로 나눈 나머지가 0일때를 구하면 제곱근이 정수인 것을 구할 수 있다. 기억하면 좋을 아이디어인 것 같다.

 

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

♣ and와 or의 역할:

  • and:
    • and는 왼쪽 조건이 참(truthy)일 때만 오른쪽 값을 평가하고 반환합니다.
    • 왼쪽 조건이 **거짓(falsy)**이면 오른쪽 값을 평가하지 않고 바로 왼쪽 값을 반환합니다.
  • or:
    • or는 왼쪽 조건이 참(truthy)**이면 오른쪽 값을 평가하지 않고 바로 왼쪽 값을 반환합니다.
    • 왼쪽 조건이 거짓(falsy)이면 오른쪽 값을 평가하고 그 값을 반환합니다.

♣ 이 코드의 동작 원리:

  • n == int(n**.5)**2:
    • 주어진 수 n이 완전제곱수인지 확인합니다.
    • n**0.5는 n의 제곱근을 계산하며, 이를 정수로 변환한 후 다시 제곱해 n과 비교합니다.
    • 이 조건이 **참(True)**이면 and 오른쪽(즉, int(n**.5+1)**2)을 평가합니다.
    • 조건이 **거짓(False)**이면 바로 or '-1'로 넘어갑니다.
  • int(n**.5+1)**2:
    • n이 완전제곱수라면, n의 제곱근보다 1 큰 수의 제곱을 반환합니다.
  • or '-1':
    • 위 조건들이 모두 실패한 경우, 즉 n이 완전제곱수가 아니면 '-1'을 반환합니다.