자기개발👨‍💻/코딩 알고리즘

[python] 프로그래머스 카펫

천숭이 2021. 1. 7. 22:44
def solution(brown, yellow):
    answer = []
    if yellow==1 and brown == 8:
        answer=[3,3]
    else:
        for i in range(1,yellow):
            if yellow %i==0:
                m=i
                n=int(yellow /i)
                isbrown=2*m+(n+2)*2
                if isbrown == brown:
                    answer = [max(n+2,m+2),min(n+2,m+2)]        
    return answer

yellow가 1일때의 경우는 답이 한가지밖에 없기때문에 answer을 정해준다

 

만약 yellow가 1이 아닌 나머지의 경우에는 

for문을 사용해 yellow가 i로 나누어진다면 그때 i가 가로세로 중 하나의 길이가 되고 

yellow를 i로 나누어 정수화한 것은 그 나머지가 된다.

정해진 가로세로의 값을 이용해 바깥을 둘러싸는 brown의 값을 유추해 볼 수 있다.

이때 유추한 값과 인자로 넘어온 brown의 값이 같으면 answer값을 반환한다

n과 m에 2를 더한 이유는 바깥 brown영역이 한줄씩 감싸져 있기 때문

B B B B
B Y Y B
B Y Y B
B B B B