[python] 프로그래머스 '카펫'

EUNCHAE KIM·2022년 11월 14일
0

처음에 문제 속 그림만 보고 '이걸 어떻게 풀어야 할까...' 고민하면서 직접 그림을 그려봤다. 가운데 yellow 블럭 부분이 그 개수에 따라 가로/세로 다양한 조합이 나올 수 있기 때문에 각 경우를 고려해줘야했다.
yellow가 홀수/짝수일때로 나눠야하나 잠깐 생각했지만,
예로 9개 같은 경우 1X9, 3X3, 9X1 의 조합이 나오는 것을 봤을 때

yellow 부분 세로의 길이 = 약수 집합들 각 요소들
yellow 부분 가로의 길이 = yellow 개수 // 세로의 길이

이런 결론에 빠르게 도달했다.
또한, 전체적으로 그림을 그려보면 brown의 개수가

(yellow 가로 2) + (yellow 세로 2) + 4

와 같다는 게 보이고
따라서 yellow 집합에 속한 요소들중에 brown 조건을 만족한 요소들을 구하면
해당 yellow 가로, 세로 길이를 구할 수 있다.

최종 정답은 전체 직사각형의 [가로,세로]이기 때문에 마지막 answer배열에 append 하는 부분에서 처리해주면 되겠다

( yellow 가로길이 + 2 ) , ( yellow 세로길이 + 2)

def solution(brown, yellow):
    heightTemp = [] # yellow 약수 집합 (세로 길이 집합)
    widthTemp = []  #  yellow 가로 길이 집합
    answer = []

    for i in range(yellow) : 
        if( yellow % (i+1) == 0) : 
            heightTemp.append(i+1) 

    for i in range(len(heightTemp)) : 
        widthTemp.append( yellow // heightTemp[i] )
        if ( widthTemp[i] >= heightTemp[i]) and (((widthTemp[i]*2)+(heightTemp[i]*2) + 4) == brown): 
            answer.append(widthTemp[i]+2)
            answer.append(heightTemp[i]+2)

    return answer
profile
Try Everything

0개의 댓글