[프로그래머스] 제곱수 판별하기 (Python)

TK·2023년 8월 30일

문제 설명

어떤 자연수를 제곱했을 때 나오는 정수를 제곱수라고 합니다. 정수 n이 매개변수로 주어질 때, n이 제곱수라면 1을 아니라면 2를 return하도록 solution 함수를 완성해주세요.

제한사항

  • 1 ≤ n ≤ 1,000,000

입출력 예

nresult
1441
9762

입출력 예 설명

  • 입출력 예 #1
    144는 12의 제곱이므로 제곱수입니다. 따라서 1을 return합니다.

  • 입출력 예 #2
    976은 제곱수가 아닙니다. 따라서 2를 return합니다.


정답 풀이 1 (함수 사용)

  • 내가 푼 답
import math
def solution(n):
    return 1 if float(math.sqrt(n)).is_integer() else 2

파이썬 제곱근 함수 sqrt

math.sqrt(x) 함수는 x의 제곱근을 반환합니다. (x에 루트를 씌운 값을 반환)
1. 이 함수의 반환형은 float 타입입니다.
2.math.sqrt(음수)가 들어오게 된다면 ERROR 가 발생합니다. (math.sqrt(-2) 이런 식은 에러 발생)

import math
math.sqrt(4) # 2.0

더보기: https://blockdmask.tistory.com/522

float().is_integer()

소수점 뒤에 모두 0이 있는 부동 소수점을 고려해야 하는 경우 다음을 사용하는 것이 좋습니다.
float 인스턴스가 정수 값으로 유한하면 True를 반환하고 그렇지 않으면 False를 반환한다.

if __name__ == '__main__': 
    x = 10.0
    isInt = float(x).is_integer()
    print(isInt)            # True

더보기: https://www.techiedelight.com/ko/check-variable-integer-python/

정답 풀이 2 (논리)

  • 0.5승은 제곱근을 한 값과 같다.
def solution(n):
    return 1 if (n ** 0.5).is_integer() else 2

정답 풀이 3 (논리)

  • 제곱근이 소숫점이 있다면 정수값과 같을 수 없다.
def solution(n):
    if n**(1/2) == int(n**(1/2)) :
        return 1
    else :
        return 2
profile
쉬운게 좋은 FE개발자😺

0개의 댓글