Test/Python(20220101~)

프로그래머스.L0.제곱수판별하기

kiostory 2022. 10. 10. 15:34

 

문제 설명

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


제한사항
  • 1 ≤ n ≤ 1,000,000

 

입출력 예
n  :  result
144 1
976 2

 

* 첫 번째 생각

def solution(n):
    for i in range(1,1001):
        if i**2 == n:
            return 1
    return 2

for 문을 가지고 n이 1000000이 될 수 있는 숫자 1000까지

무식하게 제곱해서 비교해 보는 방법

 

실행 결과
채점을 시작합니다.
정확성 테스트
테스트 1 통과 (0.32ms, 10.2MB)
테스트 2 통과 (0.03ms, 10.1MB)
테스트 3 통과 (0.02ms, 10.3MB)
테스트 4 통과 (0.04ms, 10.1MB)
테스트 5 통과 (0.20ms, 10.2MB)
테스트 6 통과 (0.21ms, 10.2MB)
테스트 7 통과 (0.34ms, 10.2MB)
테스트 8 통과 (0.31ms, 10.3MB)
테스트 9 통과 (0.01ms, 10.2MB)
테스트 10 통과 (0.36ms, 10.3MB)

 

 

* 두 번째 생각

def solution(n):
    return 1 if (n**0.5)%1 == 0 else 2

주어진 수 n의 제곱근(n의 0.5제곱) 한 값이 정수 일 경우를 찾으면 되겠지.

'정수일 경우' 라는 표현은 어떻게 해야 하나?

* 2로 나눴을때 나머지가 0 이면 짝수, 1이면 홀수

  1로 나눴을때 나머지가 0이면 (소수점 이하 값이 없는) 정수

 

* is_integer()로 표현도 가능하겠다.  ex) return 1 if (n**0.5).is_integer() else 2

 

 

실행 결과
채점을 시작합니다.
정확성 테스트
테스트 1 통과 (0.01ms, 10.2MB)
테스트 2 통과 (0.01ms, 10.3MB)
테스트 3 통과 (0.01ms, 10.3MB)
테스트 4 통과 (0.01ms, 10.2MB)
테스트 5 통과 (0.01ms, 10.3MB)
테스트 6 통과 (0.01ms, 10.2MB)
테스트 7 통과 (0.01ms, 10.4MB)
테스트 8 통과 (0.01ms, 10.2MB)
테스트 9 통과 (0.01ms, 10.2MB)
테스트 10 통과 (0.01ms, 10.3MB)

 

 

첫 번째 소요시간에 비해서 30배 빠르다 ( 0.01 : 0.34 )