본문 바로가기

알고리즘/프로그래머스

[프로그래머스][Python] 카펫

문제를 정리하자.

 

 

문졔 예시

 

 

1. 안쪽은 노란색으로 칠해져 있고, 테두리 '1줄'은 갈색으로 칠해져 있는

격자 모양의 카펫이 있다. 

2. 현재 노란색과 갈색으로 색칠된 격자의 개수를 알고 있다.

3. 가로 길이는 세로의 길이보다 길거나 같다.

 

전체 카펫의 가로와 세로의 길이를 구하여라.

 

 

brown = 24, yellow = 24일 때를 생각해보자.

 

가로의 총합, 세로의 총합은 모두 짝수이다. (가로도, 세로도 변의 개수가 짝수이기 때문이다.)

따라서 brown 가로의 길이를 구하기 위해, 2씩 빼면서 경우의 수를 나열해보자.

 

주의할 점은

1. 가로 길이의 총합이 길이가 전체 길이가 되면 안 된다. 세로 길이의 총합이 0이 되기 때문이다.

2. 가로의 길이는 세로의 길이보다 길거나 같다.

 

가로 총합: 24(x) -> 22 -> 20 -> 18 -> 16 -> 14 -> 12 -> 10(x)

세로 총합: 0(x)    ->  2   -> 4  -> 6   -> 8  -> 10 -> 12 -> 14(x)

 

가로의 총합을 가지고 세로의 총합을 알 수 있다.

 

아래 수기로 작성한 것을 보자.

 

 

brown = 24, yellow = 24 수기 작성

 

 

안쪽 네모의 넓이는 (가로 - 2) X 세로이다.

예) (11 - 2) X 1 = 9

 

 

 

# 세로 길이 <= 가로 길이
# 테두리는 1줄

def solution(brown, yellow):
    answer = []

    for b in range(brown - 2, 1, -2):

        b_col = (brown - b) // 2
        b_row = b // 2

        if b_col <= b_row and yellow == b_col * (b_row - 2):
            answer.append(b_row) # 가로
            answer.append(b_col + 2) # 세로

            return answer


print(solution(24, 24))