
Leo는 카펫을 사러 갔다가 아래 그림과 같이 중앙에는 노란색으로 칠해져 있고 테두리 1줄은 갈색으로 칠해져 있는 격자 모양 카펫을 봤습니다.

Leo는 집으로 돌아와서 아까 본 카펫의 노란색과 갈색으로 색칠된 격자의 개수는 기억했지만, 전체 카펫의 크기는 기억하지 못했습니다.
Leo가 본 카펫에서 갈색 격자의 수 brown, 노란색 격자의 수 yellow가 매개변수로 주어질 때 카펫의 가로, 세로 크기를 순서대로 배열에 담아 return 하도록 solution 함수를 작성해주세요.
갈색 격자의 수 brown은 8 이상 5,000 이하인 자연수입니다.
노란색 격자의 수 yellow는 1 이상 2,000,000 이하인 자연수입니다.
카펫의 가로 길이는 세로 길이와 같거나, 세로 길이보다 깁니다.
| brown | yellow | return |
|---|---|---|
| 10 | 2 | [4, 3] |
| 8 | 1 | [3, 3] |
| 24 | 24 | [8, 6] |
이차방정식으로 풀었다 ㅋㅋㅎㅋㅎㅋㅎㅋ
x를 가로, y를 세로라고 생각해보자
brown, yellow 값에서 힌트를 얻었다
( 가로 + 세로 ) 2 에 모서리 4를 뺀 개수가 brown ⬇️
`( x + y ) 2 - 4 = brown`
x에 관해 식을 세우면 ⬇️
x = ( brown + 4 ) / 2 - y
x의 양 끝, y의 양 끝을 제외하고 곱한 yellow ⬇️
(x - 2) * (y - 2) = yellow
x에 관해 식을 세우면 ⬇️
x = ( yellow / ( y - 2 )) + 2
두 식을 같다고 놓으면 ⬇️
(brown + 4) / 2 - y = ( yellow / ( y - 2 )) + 2
(brown + 4) / 2 - 2 = ( yellow / ( y - 2 )) + y
(brown + 4) / 2 - 2 = ( yellow / ( y - 2 )) + y
~~~~~~~~~~~~~~~~~~~ ~~~~~~~~~~~~~~~~~~~~~~~~~
이 값을 temp 라고 두고 이 값을 temp2 라고 둔다.
temp와 temp2 가 같아질 때까지 while 문을 돌면서 y값을 하나씩 증가시키며 y값을 찾는다.
y값은 최소 3이므로 초기화를 다음과 같이 해준다.
구해진 y로 x값을 찾아주면 된다.
def solution(brown, yellow):
arr = []
# x * 2 + y * 2 - 4 = brown
# (x - 2) * (y - 2) = yellow
temp = int((brown + 4) / 2 - 2)
# 초기화
temp2 = 0
y = 2
#temp 끼리 같아질 때까지 돌면서 y값 찾기
while temp2 != temp:
y = y + 1 # y값 증가
temp2 = ( yellow / ( y - 2 )) + y
# y값으로 x값 찾기
x = int(( brown + 4 ) / 2 - y)
arr.append(x)
arr.append(y)
return arr