25.08.18 정수 제곱근 판별

동진·2025년 8월 17일

문제 설명

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

제한 사항

  • n은 1이상, 50000000000000 이하인 양의 정수입니다.

입출력 예

nreturn
121144
3-1

입출력 예 설명

입출력 예#1
121은 양의 정수 11의 제곱이므로, (11+1)를 제곱한 144를 리턴합니다.

입출력 예#2
3은 양의 정수의 제곱이 아니므로, -1을 리턴합니다.

방법은 두가지 일 것 같다.
1. n의 제곱근을 특정 수로 나눠 나머지가 0인 경우만 정답을 출력하게 하자.
2. 정수를 제곱해서 n과 같으면 정답을 출력하게 하자.

난이도는 2번이 좀 더 쉬울 것 같아 2번으로 풀이를 해보겠다.

나의 풀이

논리는 다음과 같다

  1. 제곱근을 찾기 위해 1~n 까지 반복한다.
  2. i의 제곱이 n과 같다면 i를 제곱근으로 채택하고 정답을 출력하고 반복문을 종료한다.
    ※반복문 종료를 하지 않으면 끝까지 탐색하게 되고 정답이 출력되지 않는다.
  3. 정답(answer)은 (i+1)2(i+1)^2이다.
  4. 제곱근이 양의 정수가 아니라면, -1을 출력한다.
def solution(n):
    for i in range(1,n+1):		# 1.
        if i**2 == n:	
            answer = (i+1)**2	# 3.
            break		# 2.
        else:
            answer = -1		# 4.
    return answer

결과


통과는 했지만 수가 커지면 효율성이 떨어질 것 같다. 다른사람의 풀이도 봐보자.

다른사람 풀이

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

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

이사람은 n의 제곱근을 1과 나눠 나머지가 0인 경우만 정답을 아닌경우는 'no'=-1을 출력하게 코드를 작성했다.

알게된 점

  1. 그냥 1로 나눠도 된다.
  2. return 'no'는 -1을 출력한다.

사람에따라 접근법이 다르고 코드 작성하는 것도 다른 것을 매번 느낀다.

profile
AI 개발공부 일지

0개의 댓글