파이썬/코드카타

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

뜌비뜌바밥 2024. 8. 13. 14:40
정수 제곱근 판별 - 문제

 

[문제 설명]

 

[입출력 예]

 

코드카타 1차 시기

 

[내 코드]

def solution(n):
    answer = 0
    for i in range(1,n):
        if i*i==n:
            answer=(i+1)**2
        else:
            answer = -1
    return answer

 

제곱근을 구해야 하므로 'i x i=n'인 값을 찾는다고 생각해서 이렇게 써봄

 

[실행 결과]

 

역시나 턱없는 실패.

값이 나오지 않고, -1로만...결과가 나오는 듯 하다.

 

코드카타 2차 시기

 

[내 코드]

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

 

결국 코드카타 검색 ending

검색을 해보고 수정을 2가지 해보기로 함

 

  1. -1값을 산출해야하므로 아예 answer 값을 -1로 설정하라고 함.
    나는 if 구문을 사용했는데 실은 이게 맞는지 모르겠지 뭐야......//..//
  2. 위에서 곱셈으로 기재했던 부분을 나눗셈으로 변경해서 기재함.

샘플 데이터에서는 잘 나오더라.

 

[실행 결과]

예....그렇지만  시간 초과로 안 돌아가요.

결국 실패 (지겨워..)

코드카타 3차 시기

 

[내 코드카타]

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

 

어디서 또 찾아본 break 함수

배우긴 배웠는데 기억이 나지 않는다.

막간을 이용한 함수 재정리

더보기

break 문법

for, while 등 반복문 내에서 사용할 수 있는 문법

break를 사용하는 경우 즉시 해당 반복문을 탈출함

[실행 결과]

네 다왔는데 뭐가 문제일까요...

또 다시 검색..ㅎ

드디어 정답을 찾았다. 잡았다...요놈..!

 

드디어 정답 대공개

 

[정답 1]

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

 

예 range 범위가 n+1이어야 합니다.

 

[정답 2]

def solution(n):
    answer = -1
    for i in range(1,n+1):
        if n//i==i and n%i==0:
            answer=(i+1)**2
            break
    return answer

 

어디서 찾아보니 이런 방법도 쓰더라

'//' 는 나눗셈 후 정수의 몫만 표기하는 건데 아마 나눗셈 자체가 오래 걸리니 시간을 줄이려고 작성하신 게 아닐까 싶음

 

[정답 3]

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

 

맨 처음 if 함수를 사용했었는데 이걸 끝까지 사용해서 구할 수 있는 방법이 있을까 해서 작성해봄.

결과는 대성공.

여기서는 break, 나눗셈을 활용했으면 금방 끝났을지도 모르겠다.

위에서 모두 -1 값이 산출되길래...안되는 건가 했는데 break를 걸어주니 문제 없다.

 

[정답 4]

def solution(n):
    x = int(n ** (1/2))
    if n == x **2:
        return (x+1) ** 2
    else:
        return -1

 

다른 사람들의 풀이도 한 번 확인해보자.

 내가 처음에 x를 곱해서 n인지 확인하려는 방법을 사용한 정답인데

이때 x에 대한 조건이 먼저 들어가 있는 것을 확인할 수 있다.

 

  • x= int(n**(1/2)) - 먼저, n의 제곱근을 계산하고 이를 정수 값으로 x에 저장

그리고 나서 x를 제곱한 값이 n과 같은지 확인한 후 그 여부에 따라 값이 나오게끔 함

 

요건 x의 값을 설정해주고 진행하는 방법을 알았더라면 조금 더 원활하게 되었을 거 같음. 


 

오늘도 한 문제 해결...(이라고 할 수 있는지 모르겠지만)

여튼 파이썬 너 여전히 너무 어렵다 나한테....ㅎ

 

 

'파이썬 > 코드카타' 카테고리의 다른 글

[프로그래머스] 파이썬(Python) 자릿수 더하기  (0) 2024.08.05