3 minutes
Leetcode 1954
1954. Minimum Garden Perimeter to Collect Enough Apples
For this solution, I will try to explain it with an image.
I have drawn a picture to explain how this solution works. I have drawn a 2 x 2 and a 4 x 4 square. I will explain the reason for this later. And I have given each position a letter instead of coordinate so I can give a map with each letter and coordinate.

a = (0, 0)
b = (1, -1)
c = (0, -1)
d = (-1, -1)
e = (-1, 0)
f = (-1, 1)
g = (0, 1)
h = (1, 1)
i = (1, 0)
j = (2, 0)
k = (2, -1)
l = (2, -2)
m = (1, -2)
n = (0, -2)
o = (-1, -2)
p = (-2, -2)
q = (-2, -1)
r = (-2, 0)
s = (-2, 1)
t = (-2, 2)
u = (-1, 2)
v = (0, 2)
w = (1, 2)
x = (2, 2)
y = (2, 1)
I have drawn a 2 x 2 and a 4 x 4 square because drawing a 3 x 3 square with the center of 0 x 0 is hard. But you as a reader should know that we will use the 3 x 3 part in the following paragraph.
Using this we can see that the number of apples for the 2 x 2 square is 0 + 2 + 1 + 2 + 1 + 2 + 1 + 2 + 1 = 12, so we have 12 apples in the first plot of land. Now for the 4 x 4 square we can do 0 + 2 + 1 + 2 + 1 + 2 + 1 + 2 + 1 + 2 + 3 + 4 + 3 + 2 + 3 + 4 + 3 + 2 + 3 + 4 + 3 + 2 + 3 + 4 + 3 = 60, and 60 - 12 = 3 * 3 * 12. We are doing 60 - 12 because 12 is the number of apples in the 2 x 2 and 60 is the number of apples in the 4 x 4. We are doing 3 * 3 because to find the number of apples in a 4 x 4 we need to know the number of apples in a 3 x 3. Since 60 - 12 = 48, 3 * 3 * 12 = 48. So to find the number of apples in a 4 x 4 we can do 12 + 48 = 60 (The 12 is the 2 x 2 and the 48 is the 3 x 3).
Now some of you might be wondering where we get the 3 * 3 * 12. It is basically sideLength * sideLength * 12. To understand how we get the 12, we have to compare a square of 1 x 1 and a square of 2 x 2. The square of 1 x 1 has 0 apples while the 2 x 2 square has 12, so we can do 12 - 0 = 12.
The Code:
func minimumPerimeter(neededApples int64) int64 {
sideLength := 0
for neededApples > int64(0) {
sideLength++
neededApples -= int64(sideLength * sideLength * 12)
}
return int64(sideLength * 8)
}