[Python 코드카타] 정수 제곱근 판별

seonyoung·2024년 8월 1일
0

📁 문제 설명

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

📌 내가 적은 틀린 답

def solution(n):
    if n == x*x:
        return (x+1)**
    elif n != x*x:
        return -1
    else:
        return 0
  • 정말 문제 그대로 n이 x의 제곱이라면 x+1의 제곱을 리턴하고, n이 x의 제곱이 아니라면 -1을 리턴해주며, 그 외는 0으로 해달라고 작성함
    → 아무리 생각해도 정답이 나오지 않아 이에 대해 찾아봄

📌 올바른 정답

def solution(n):
    x = 1
    while x * x <= n:
        if x * x == n:
            return (x + 1) * (x + 1)
        x += 1
    return -1
  • x를 1부터 시작하여, x의 제곱이 n 이하일 때까지 반복
  • x의 제곱이 n과 같다면, x+1의 제곱을 계산하여 반환
  • 모든 x에 대해 x의 제곱이 n보다 커지면 반복을 멈추고, -1을 반환

📌 그 외의 답

import math

def solution(n):
    x = int(math.sqrt(n))  # n의 제곱근을 정수로 변환하여 x를 구함
    if x * x == n:
        return (x + 1) * (x + 1)  # x+1의 제곱을 반환
    else:
        return -1  # n이 양의 정수 x의 제곱이 아니면 -1을 반환
  • x = int(math.sqrt(n))
    • 주어진 양의 정수 n의 제곱근을 계산하고, 이를 정수로 변환하여 x에 저장
    • 이 과정에서 math.sqrt(n)은 n의 제곱근을 계산하며, int() 함수는 소수점 이하를 버린 정수 부분만을 반환
  • if x * x == n:
    • 계산된 x 값의 제곱이 n과 같은지 확인
    • 즉, x가 n의 양의 정수 제곱근이라면 조건이 참
  • return (x + 1) * (x + 1)
    • 위 조건이 참이면 (x + 1)의 제곱을 계산하여 반환
    • 여기서 x + 1은 n의 제곱근에서 1을 더한 값
  • else:
    • 위 조건이 거짓인 경우, 즉 n이 양의 정수 x의 제곱이 아니라면 이 부분이 실행
  • return -1
    • 이 경우 -1을 반환하여 함수의 실행을 마무리

💡 x = int(math.sqrt(n))

  • 주어진 양의 정수 n의 제곱근을 계산하고, 그 값을 정수로 변환하여 x에 저장하는 역할
  • math.sqrt(n): math 모듈의 sqrt 함수는 제곱근을 계산하는 함수
  • 즉, int(math.sqrt(n))은 계산된 제곱근 값을 정수로 변환하여 x에 저장
profile
원하는 바를 이루고 싶은 사람입니다.

0개의 댓글