코테 준비

[프로그래머스] 카펫

우디혜 2020. 9. 20. 01:12

로직

red가 n * m 의 직사각형이라고 가정했을 때

  1. sum = brown + red = (n+2) * (m+2)

  2. brown = 2(n+2) + 2(m+2) - 4

  3. red = n*m

 

위 세 가지 조건을 만족한다

따라서, 식을 정리하여 n*m 과 n+m 두 가지 값을 구한 뒤

 

for loop으로 1부터 sum//2까지 순회하며,

  •    현재 값 * (sum - 현재값) = n * m 이 되는 조합을 찾는다

  •    찾게되면 각각 +2 씩을 해준다(n*m는 red에 대한 값이므로)

 

그리고 큰 수가 앞에오도록 정렬해준뒤 return

 

코드

def solution(brown, red):
    answer = []
    sum = brown + red
    
    # red = n*m rect
    n_plus_m = brown//2 - 2
    n_multi_m = red
    
    print(n_plus_m, n_multi_m)
    for i in range(1, (n_plus_m//2)+1):
        rest = n_plus_m - i
        if i * rest == n_multi_m:
            answer = [i+2, rest+2] if i > rest else [rest+2, i+2]
    
    return answer