[파이썬/python] 프로그래머스 : 카펫 (Lv.2) (브루트포스)

def solution(brown, yellow):
    n = [i for i in range(1,yellow+1) if yellow % i == 0]

    for j in range(1,len(n)+1):
        if (n[j-1]+2) * (n[-j]+2) == yellow + brown:
            return n[-j]+2,n[j-1]+2

 

 

맨처음에

def solution(brown, yellow):
    for i in range(1,yellow+1):
        for j in range(1,yellow+1):
            if i * j == yellow and (i+2) * (j+2) == brown + yellow:
                return [j+2, i+2]

이 방식으로 풀었는데 절반정도의 문제가 시간초과로 인해 통과하지 못하였다.

그래서 배열 n안에 yellow의 약수만 넣어줘서 계산시간을 단축시키게 했다.

 

 

 

다른 사람 풀이

def solution(brown, red):
    for i in range(1, int(red**(1/2))+1):
        if red % i == 0:
            if 2*(i + red//i) == brown-4:
                return [red//i+2, i+2]

둘레의 길이를 이용하였다고 한다

수학을 못해서 그런지 이런 사고가 나오지 않는당....

comment