https://programmers.co.kr/learn/courses/30/lessons/42842
가능한 경우를 모두 확인해보는 완전탐색 문제
문제설명
Leo는 카펫을 사러 갔다가 아래 그림과 같이 중앙에는 노란색으로 칠해져 있고 테두리 1줄은 갈색으로 칠해져 있는 격자 모양 카펫을 봤습니다.
Leo가 본 카펫에서 갈색 격자의 수 brown, 노란색 격자의 수 yellow가 매개변수로 주어질 때 카펫의 가로, 세로 크기를 순서대로 배열에 담아 return 하도록 solution 함수를 작성해주세요.
입출력 예
brown yellow return
10 2 [4, 3]
8 1 [3, 3]
24 24 [8, 6]
솔루션
가능한 yellow의 곱 형태를 모두 구한다.
brown은 가장자리 1줄씩만 있으므로 brown+yellow(전체 격자 수)가
(yellow의 가로+2) * (yellow의 세로+2)와 같은 경우가 정답이다.
# cand -> 곱해서 24가되는 경우
[(24, 1), (12, 2), (8, 3), (6, 4)]
코드
# 파이썬
def solution(brown, yellow):
cand = [(yellow//i,i) for i in range(1, int(yellow**.5)+1) if yellow % i == 0]
for m, n in cand:
if (m+2) * (n+2) == brown+yellow:
return [m+2, n+2]
핵심 코드
[(yellow//i,i) for i in range(1, int(yellow**.5)+1) if yellow % i == 0]