문제에서 구하고자하는 부분을 식으로 표현하면 다음과 같다.
G = 성원이의 현재 몸무게의 제곱 - 성원이가 기억하는 몸무게의 제곱
성원이의 현재 몸무게를 X, 성원이가 기억하는 몸무게를 Y라고 놓았을 때 곱셈공식에 의해 다음과 같은 수식이 나오게 된다.
G = X^2 - Y^2
X와 Y를 투 포인터로 설정하고 점점 늘려가면서 확인하면 성원이의 현재 몸무게로 가능한 수치를 확인할 수 있다.
import sys
input = sys.stdin.readline
G = int(input())
# G = (x+y)*(x-y)
x = [i for i in range(1, 100001)]
y = [j for j in range(1, 100001)]
X = 100000 # 현재 몸무게의 최댓값
Y = 100000 # 기억하고 있던 몸무게의 최댓값
res = []
left = 0
right = 0
while left < X and right < Y:
if (x[left] + y[right]) * (x[left] - y[right]) == G:
res.append(x[left])
if (x[left] + y[right]) * (x[left] - y[right]) < G:
left += 1
continue
right += 1
if len(res) == 0:
print(-1)
else:
res.sort()
for i in res:
print(i)