문제 개요
두 개의 숫자 x와 y가 주어졌다고 가정해 봅시다. 이 두 숫자를 이어 붙여(concatenate) 하나의 새로운 숫자를 만든 다음, 그 결과가 완전제곱수(perfect square)인지 확인하는 것이 목표입니다.
예를 들어 입력이 x = 2, y = 89라면, 두 수를 연결한 결과는 289입니다. 289는 17²과 같으므로 출력은 True가 됩니다.
해결 접근 방법
이 문제는 다음 단계를 통해 해결할 수 있습니다.
- first_num : x를 문자열로 변환하여 저장합니다.
- second_num : y를 문자열로 변환하여 저장합니다.
- res_num : first_num과 second_num을 이어 붙인 뒤 정수형(int)으로 변환하여 저장합니다.
- sqrt_val : res_num의 제곱근을 구하고, 그 정수 부분만 잘라내어 저장합니다.
- sqrt_val × sqrt_val의 값이 res_num과 같다면
True를 반환합니다. - 그렇지 않다면
False를 반환합니다.
핵심 아이디어는 간단합니다. 어떤 수 n이 완전제곱수라면, n의 제곱근을 정수로 내림한 값을 다시 제곱했을 때 반드시 n과 동일해야 합니다. 이 성질을 이용해 판별합니다.
예제 코드
from math import sqrt
def solve(x, y):
first_num = str(x)
second_num = str(y)
res_num = int(first_num + second_num)
sqrt_val = int(sqrt(res_num))
if sqrt_val * sqrt_val == res_num:
return True
return False
x = 2
y = 89
print(solve(x, y))입력
2, 89
출력
True
코드 설명
str(x)와str(y)로 두 숫자를 각각 문자열로 변환합니다.- 문자열끼리 더하면(
first_num + second_num) 두 수가 자연스럽게 연결되며, 이를int()로 감싸 정수로 되돌립니다. math.sqrt()로 제곱근을 구한 뒤int()로 소수점 이하를 버려 정수 부분만 남깁니다.- 그 정수를 다시 제곱한 값이 원래 수와 일치하는지 비교하여 완전제곱수 여부를 최종 판단합니다.
참고 : 더 안전한 대안, math.isqrt
부동소수점 연산은 매우 큰 숫자에서 오차가 발생할 수 있습니다. 파이썬 3.8 이상에서는 정수 전용 제곱근 함수인 math.isqrt()를 사용하는 것이 더 안정적입니다.
from math import isqrt
def solve(x, y):
res_num = int(str(x) + str(y))
return isqrt(res_num) ** 2 == res_num이 방식은 정수 연산만 사용하므로 아무리 큰 숫자가 연결되더라도 정확한 결과를 보장합니다.