[프로그래머스] 카펫 풀이

 


1. 문제

https://programmers.co.kr/learn/courses/30/lessons/42842

2. 풀이

  • 전체 직사각형과 노란 직사각형의 가능한 세로 크기를 모두 구한다.
  • 하나씩 꺼내보면서 가로와 세로에 각각 -2 된 값보다 작거나 같은 경우(내부에 속하려면 전체 격자 크기의 가로, 세로 크기 -2보다 작거나 같아야 하기 때문)를 구해서 return
import math
def make_grid_num(rec_grid_num, start_idx):  # 가능한 직사각형의 세로 크기를 모두 구한다.
    sizes = []
    half = (int)(math.sqrt(rec_grid_num))
    for i in range(start_idx, half + 1):
        if (rec_grid_num/i).is_integer():
            sizes.append(i)
    return sizes

def solution(brown, yellow): 
    total_grid_num = brown + yellow
    brown_case = make_grid_num(total_grid_num, 3)
    yellow_case = make_grid_num(yellow, 1)

    for b_col in brown_case:  # 하나씩 꺼내보면서 가로와 세로에 각각 -2 된 값보다 작거나 같은 경우를 구해서 return
        for y_col in yellow_case:
            if b_col - 2 >= y_col and (int)(total_grid_num / b_col) - 2 >= (int)(yellow / y_col):
                return [(int)(total_grid_num / b_col), b_col]
            
    return -1