[프로그래머스] 카펫 [완전탐색] [python] Level2

 

문제 설명

 

Leo는 카펫을 사러 갔다가 아래 그림과 같이 중앙에는 노란색으로 칠해져 있고 테두리 1줄은 갈색으로 칠해져 있는 격자 모양 카펫을 봤습니다.

Leo는 집으로 돌아와서 아까 본 카펫의 노란색과 갈색으로 색칠된 격자의 개수는 기억했지만, 전체 카펫의 크기는 기억하지 못했습니다.

Leo가 본 카펫에서 갈색 격자의 수 brown, 노란색 격자의 수 yellow가 매개변수로 주어질 때 카펫의 가로, 세로 크기를 순서대로 배열에 담아 return 하도록 solution 함수를 작성해주세요.

 

 

구현 및 설계

 

접근 방법

먼저 우리가 구하는 가로와 세로의 길이를 x, y라고 하겠습니다.

가장 바깥 테두리는 brown으로 채워져 있으니 yello의 가로 세로 길이는 x-2,y-2이 됩니다.

yello의 가로, 세로 길이를 a, b라고 하겠습니다.

이 a, b는 yello의 약수 중에 존재 합니다.

고로 for문을 돌려 약수들을 검사하면서 yellow = a*b, brown = 2(a+2+b+2)+4 을 검사 하며 조건에 맞는 

a와 b를 찾을 수 있습니다! 이제 a+2,b+2를 반환해주어 해결이 가능합니다.

 

my_solution

def solution(brown, yellow):
    # 1
    for a in range(1, int(yellow ** 0.5) + 1):
    
        if yellow % a == 0:
        # 2
            b = yellow // a
            # 3
            if 2 * a + 2 * b + 4 == brown:
                return [b + 2, a + 2]

1. yellow의 약수를 찾는다.

   2. b = yellow // a 를 통해 a와 짝이 되는 yellow의 약수를 찾습니다.

     3. 만약 brown == 2 * a + 2 * b + 4 조건을 만족한다면

         카펫의 가로, 세로길이인 [b + 2, a + 2]를 반환해주어 해결 할 수 있습니다.

반응형

+ Recent posts