프로그래머스 Lv.2 카펫 파이썬

2024. 7. 10. 15:54알고리즘문제 풀이/프로그래머스

문제 링크

https://school.programmers.co.kr/learn/courses/30/lessons/42842

풀이

카펫의 가로 길이를 a, 카펫의 세로 길이를 b라고 하자.

(직사각형의 넓이) = a * b = brown + yellow

(a - 2) * (b - 2) = yellow

위 식을 통해 a, b를 brown, yellow로 표현해보자.


a * b - 2 * (a + b) + 4 = yellow
brown + yellow - 2 * (a + b) + 4 = yellow
brown + 4 = 2 * (a + b)

a + b = brown / 2 + 2

 

이를 통해 

p = a + b = brown / 2 + 2

q = a * b = brown + yellow

임을 알 수 있다.

 

해를 a,b로 하는 방정식은

(x - a) (x - b) = 0

x^2 - (a+b)x + ab = 0

x^2 - px + q = 0

x = (p ± (p^2 - 4*q)^(1/2)) / 2

 

가로의 길이(a)가 세로의 길이(b)보다 같거나 크므로

a = (p + (p^2 - 4*q)^(1/2)) / 2

b = (p - (p^2 - 4*q)^(1/2)) / 2

전체 코드

def solution(brown, yellow):
    answer = []
    
    q = brown + yellow
    p = brown / 2 + 2
    
    a = (p + (p**2-4*q)**(1/2))/2
    b = (p - (p**2-4*q)**(1/2))/2
    answer = [a, b]
    return answer