문제 출처: https://programmers.co.kr/learn/courses/30/lessons/42842
// 111111111111...
// 100000000000...
// 111111111111...
// 111111111111...
// 100000000000...
// 100000000000...
// 111111111111...
// 111111111111
// 1
// 1
// 111111111111
노란색의 세로 개수는 최소 1이 되어야 하므로, 갈색의 세로 최소 개수는 3개입니다. 바꿔서 표현하면 노란색 세로 최소 1개를 둘러쌀 수 있는 갈색의 세로 개수입니다.
갈색의 세로 개수를 한 개씩 늘리면서 가로 개수는 한 개씩 줄여간다고 하겠습니다. 전체 가로 개수에서 둘을 제외하고 전체 세로 개수에서 둘을 제외한 곱이 노란색의 개수와 같아질 때까지 세로 개수를 늘리고 가로 개수를 줄이면 됩니다.
func solution(_ brown:Int, _ yellow:Int) -> [Int] {
var count = 0
var halfBrown = brown / 2
var vertical = (2 + count)
var horizontal = (halfBrown-1-count)
while (vertical - 1) * (horizontal - 2) != yellow {
count += 1
vertical = (2 + count)
horizontal = (halfBrown - 1 - count)
}
return [horizontal, vertical+1]
}