프로그래머스 Python 문제풀이 입니다.
문제
https://school.programmers.co.kr/learn/courses/30/lessons/42842#
[나의 풀이]
def solution(brown, yellow):
import math
answer = [-1,-1]
divisors = []
for i in range(1,yellow+1):
if yellow % i == 0 :
divisors.append(i)
len_div = len(divisors)
for i in range(0,math.ceil(len_div/2)):
if (divisors[i]+2) * (divisors[len_div-1-i]+2)-yellow == brown:
answer[0] = divisors[len_div-1-i]+2
answer[1] = divisors[i]+2
return answer
카펫을 구성하는 칸 중 테두리의 brown 색의 갯수, 테두리를 제외한 칸의 yellow 갯수가 주어질 때, 가로 >= 세로인 카펫의 가로,세로 길이를 구하는 문제입니다. brown 색깔은 테두리에만 위치해 있기 때문에 중심에 있는 yellow 색깔의 갯수를 약분한 수들을 짝지어 +2,+2 씩 했을 때의 곱이 brown + yellow 갯수임에 착안하여 해결한 풀이입니다.🐟🐟🐟
저의 풀이와 같은 원리로
def solution(brown, red):
nm = brown + red
for n in range(1, nm+1):
if nm%n != 0:
continue
m = nm//n
if (n-2)*(m-2) == red:
return sorted([n, m], reverse = True)
위와 같이 전체 크기 기준으로 약수들을 구하고 -2,-2 해주어 red(현재는 yellow로 수정) 갯수에 맞는 값을 구하는 방식의 풀이 또한 볼 수 있었습니다.🌻🌻🌻
감사합니다.