[Algorithm] Programmers : 카펫 by Python

엄희관·2020년 11월 23일
0

Algorithm

목록 보기
6/128
post-thumbnail

[문제 바로가기] https://programmers.co.kr/learn/courses/30/lessons/42842

📌문제 설명

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

Leo는 집으로 돌아와서 아까 본 카펫의 노란색과 갈색으로 색칠된 격자의 개수는 기억했지만, 전체 카펫의 크기는 기억하지 못했습니다.
.
Leo가 본 카펫에서 갈색 격자의 수 brown, 노란색 격자의 수 yellow가 매개변수로 주어질 때 카펫의 가로, 세로 크기를 순서대로 배열에 담아 return 하도록 solution 함수를 작성해주세요.

제한사항 )
갈색 격자의 수 brown은 8 이상 5,000 이하인 자연수입니다.
노란색 격자의 수 yellow는 1 이상 2,000,000 이하인 자연수입니다.
카펫의 가로 길이는 세로 길이와 같거나, 세로 길이보다 깁니다.

입출력 예 )

💡 문제 풀이

문제를 잘 못 이해해서 곤란했었던 문제 잘 좀 읽자...😂

brown과 yellow 격자의 개수를 모두 합한 면적을 만족시키는 사각형(행, 열 조합)은 다수다.
ex) brown(10), yellow(2)일 때 3개의 사각형이 나올 수 있다.(12x1, 6x2, 4x3)

하지만, 문제에서 노란색 격자가 중앙에 위치해야하며 그 주변을 갈색 격자가 감싸야 한다 했으므로 사각형의 행은 최소 3이상이 되야한다!!!

따라서, brown + yellow 면적에서 행이 3이상인 사각형을 구하면 끝
나의 실수 : brown과 yellow의 개수도 당연히 일치해야한다는 것을 망각;;

def solution(brown, yellow):
    total = brown + yellow # 카펫의 총 면적
    for i in range(3, brown): # 최소 3부터 시작
        if not total % i: # 면적으로 만들 수 있는 행, 열이 존재
            col = max(i, total//i)
            row = min(i, total//i)
            if (col * 2 + row * 2) - 4 == brown: # brown 개수 일치여부
                return [col, row]
profile
허브

0개의 댓글