임의의 양의 정수 n에 대해, n이 어떤 양의 정수 x의 제곱인지 아닌지 판단하려 합니다.
n이 양의 정수 x의 제곱이라면 x+1의 제곱을 리턴하고, n이 양의 정수 x의 제곱이 아니라면 -1을 리턴하는 함수를 완성하세요.
| n | return |
|---|---|
| 121 | 144 |
| 3 | -1 |
입출력 예#1
121은 양의 정수 11의 제곱이므로, (11+1)를 제곱한 144를 리턴합니다.
입출력 예#2
3은 양의 정수의 제곱이 아니므로, -1을 리턴합니다.
방법은 두가지 일 것 같다.
1. n의 제곱근을 특정 수로 나눠 나머지가 0인 경우만 정답을 출력하게 하자.
2. 정수를 제곱해서 n과 같으면 정답을 출력하게 하자.
난이도는 2번이 좀 더 쉬울 것 같아 2번으로 풀이를 해보겠다.
논리는 다음과 같다
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을 출력하게 코드를 작성했다.
알게된 점
사람에따라 접근법이 다르고 코드 작성하는 것도 다른 것을 매번 느낀다.