조건을 잘 보면, 점수는 모두 홀수로 주어진다는 사실을 알 수 있다. 그리고 1부터 2*i-1까지의 모든 홀수의 합은 제곱수, 즉 i^2가 된다.
따라서 (x+y)값이 제곱수인지를 판단한다면 대부분의 경우를 가지치기할 수 있다.
또한 x 조합으로 가장 작은 조합을 찾으려면, 그리디하게 들어갈 수 있는 가장 큰 홀수부터 넣어 보면 된다. 여기서 주의할 점은, 남는 x == 2인 경우는 존재가 불가능하다. (2보다 작은 홀수는 1이며, 1 하나로는 2를 표현할 수 없다) 이 점을 염두해 두고 문제를 풀이하도록 하자.
풀이 코드
MAX = float('inf')
x, y = map(int, input().split())
total = x + y
if total ** 0.5 % 1 != 0 :
print(-1)
exit()
if x == 0 :
print(0)
exit()
total = int(total ** 0.5)
cnt = 0
for i in range(total-1, -1, -1) :
if x < 2*i+1 or x - 2*i - 1 == 2 :
continue
x -= 2*i + 1
cnt += 1
if x == 0 :
break
print(cnt if not x else -1)