어떤 수 n이 주어졌을 때, 이 수에 1을 더하면 완전제곱수가 되는지 확인하는 문제입니다.
예를 들어 입력값이 n = 288이라면, 여기에 1을 더한 값은 289이고, 289는 17의 제곱(17²)과 같으므로 결과는 True가 됩니다.
문제 해결 접근 방법
이 문제는 다음 단계를 통해 간단하게 해결할 수 있습니다.
- res_num := n + 1 (n에 1을 더한 값을 저장)
- sqrt_val := res_num의 제곱근에서 정수 부분만 추출
- sqrt_val * sqrt_val이 res_num과 같다면
- True 반환
- 그렇지 않으면 False 반환
즉, 1을 더한 값의 제곱근을 구하고, 그 정수를 다시 제곱했을 때 원래 값과 일치하는지만 확인하면 됩니다. 아래 예제 코드를 통해 더 자세히 살펴보겠습니다.
예제 코드
from math import sqrt
def solve(n):
res_num = n + 1
sqrt_val = int(sqrt(res_num))
if sqrt_val * sqrt_val == res_num:
return True
return False
n = 288
print(solve(n))입력
288
출력
True
코드 설명
위 코드는 파이썬의 math.sqrt() 함수를 사용하여 제곱근을 계산합니다. n에 1을 더한 값의 제곱근을 구한 뒤 정수로 변환하고, 그 정수를 다시 제곱하여 원래 값과 비교합니다. 두 값이 같다면 해당 수는 완전제곱수이므로 True를 반환하고, 그렇지 않으면 False를 반환합니다. 이 방법은 시간 복잡도가 O(1)로 매우 효율적이며, 큰 수에 대해서도 빠르게 동작합니다.