꼬꼬마 블로그

꼬꼬마의 기술 블로그

문제 설명

프로그래머스 2단계의 문제입니다.

위와 같은 카펫이 있을 때 갈색, 노란색의 영역의 숫자를 통해 너비와 높이를 구하는 문제입니다.

세로는 가로보다 같거나 길고 yellow는 1보다 큽니다.

 

풀이

def solution(brown, yellow):
    max_len = brown // 2

    for h in range(3, max_len):
        for w in range(3, max_len):
            if (w + h) * 2 - 4 == brown and (w - 2) * (h - 2) == yellow:
                return [w, h]

 

변수 설명

max_len: 가로 혹은 세로로 가장 길 수 있는 길이입니다. 사각형의 4변의 합의 1/2으로 설정했습니다.

 

간단 설명

가로, 세로를 max_len만큼 순회하며 아래 두가지 조건이 만족하는 가로, 세로를 구합니다.

 

1.  (가로 + 세로) * 2 - 4를 한 값이 brown과 같을 경우

이때 4를 빼는 이유는 위의 옅은 갈색의 경우 4변을 모두 더하면 4가 더 추가해서 계산되기 때문입니다.

 

2. (가로 - 2) * (세로 * 2)를 한 값이 yellow와 같을 경우


2씩 제거하는 이유 위아래로 1씩 2, 양옆으로 1씩 2 이렇게 각각을 빼 yellow 영역의 가로, 세로를 구합니다.

위 두가지 조건이 모두 맞을 경우 가로, 세로를 반환합니다.