안녕하세요 :)
https://programmers.co.kr/learn/courses/30/lessons/42842
풀이
안쪽 중앙에 노란색 칠한 부분의 가로 길이를 a, 세로 길이를 b라고 해보겠습니다.
그렇다면 axb 가 문제에서 주어지는 yellow (노란 카펫의 크기) 입니다.
문제에서 주어지는 brwon(브라운 카펫의 크기)는 어떻게 구해질 수 있을까요?
겉을 하나씩으로만 둘러싸고 있기 때문에
brwon = (a+2)x(b+2) – ab = 2a+2b+4 가 됩니다.
이걸 이용하면 a와 b를 이용할 수 있겠죠.
문제에서 가로 길이는 세로 길이와 같거나, 세로 길이 보다 길다고 했기 때문에
a >= b 겠죠. 그럼 for문에서 a는 a+b의 평균값보다 크거나 같은 수 부터 시작하면 됩니다.
def solution(brown, yellow):
# yellow = a*b
# brown = (a+2)(b+2) = 2a+2b+4
brown -= 4
brown //= 2 # a+b 값
for a in range(brown // 2, brown):
b = brown - a
if a >= b and a * b == yellow:
return [a + 2, b + 2]
a랑 b가 같은 수인게 답이 될 수도 있죠.
if 문에서 a>=b 이면서 a*b == yellow (ab) 이면
답을 return 해주고 종료하면 됩니다.