데이터사이언스 기록기📚

[프로그래머스] Level 1_ 정수 제곱근 판별 본문

Coding Test/프로그래머스(Python)

[프로그래머스] Level 1_ 정수 제곱근 판별

syunze 2022. 5. 6. 17:43

유형

연습문제

 

문제

https://programmers.co.kr/learn/courses/30/lessons/12934

 

코딩테스트 연습 - 정수 제곱근 판별

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

programmers.co.kr

 

나의 문제풀이1 (실패)

def solution(n):
    for x in range(1,n//2+1):
        if x**2 == n:
            return (x+1)**2
        else:
            return -1

 

나의 문제풀이2 (실패)

 - try,except, else 문 https://blockdmask.tistory.com/537

 

[python] 파이썬 예외처리 try, except, else, finally 사용 방법

안녕하세요. BlockDMask입니다. 오늘은 파이썬에서 예외를 처리하는 방법에 대해서 이야기해보려 합니다. <목차> 1. 예외란? 예외처리 방법 try except 2. 예외 처리 방법 try, except, else, finally  2-1) try..

blockdmask.tistory.com

import math as m

def solution(n):
    try:
        int(m.pow(n)) == False
    except:
        return -1
    else:
        return (n+1)**2

 

나의 문제풀이3 (실패 - 정확성 94.4)

def solution(n):
    for x in range(1,n//2+1):
        if x ** 2 == n:
            return (x+1)**2
    return -1

 

나의 문제풀이4 (성공)

- 실패 원인 : for문 돌아가는 횟수때문에 속도가 느렸음

 - 해결방법 : 제곱근 횟수만큼 for문 사용 후 해결

import math as m

def solution(n):
    for x in range(1,int(m.sqrt(n))+1):
        if x ** 2 == n:
            return (x+1)**2
    return -1

 

다른 사람들의 문제풀이

 1) **(1/2) 사용

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

    if sqrt % 1 == 0:
        return (sqrt + 1) ** 2
    return -1

 

 2) 1번 한 줄 코드

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

 

 3) sqrt와 is_integer() 사용

 

변수가 정수 Python인지 확인

이 튜토리얼은 파이썬에서 객체가 정수 유형인지 아닌지 확인하는 방법을 보여줍니다.

www.delftstack.com

import math
def nextSqure(n):
    return -1 if not math.sqrt(n).is_integer() else (math.sqrt(n)+1)**2

 

 4) pow 이용

def nextSqure(n):
    sqrt = pow(n, 0.5)
    return pow(sqrt + 1, 2) if sqrt == int(sqrt) else -1
728x90
Comments