def solution(brown, yellow):
total = brown + yellow
for row in range(3, int(total**0.5)+1):
if total % row == 0:
col = total // row
if (row-2)*(col-2) == yellow:
return [col, row]
print(solution(10, 2), [4,3])
print(solution(8, 1), [3,3])
print(solution(24, 24), [8,6])
yellow와 brown을 더하면 total이 된다. 전체의 모양을 row * column이라 할 때 yellow의 개수는 (row-2)*(column-2)개가 된다. brown이 최대 5000이고 yellow가 최대 2,000,000이라 10,000,000,000개의 모양이 가능할 것 같지만, row가 3부터 시작해서 (yellow의 최소값이 1이니 row는 최소 3부터다) Math.sqrt(total)까지만 하면 어짜피 뒤에는 했던 것 반복이다. 그렇게 되면 가능한 경우의 수가 100,000로 확 줄어버린다.