프로그래머스_카펫

임정민·2023년 5월 27일
1

알고리즘 문제풀이

목록 보기
53/173
post-thumbnail

프로그래머스 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로 수정) 갯수에 맞는 값을 구하는 방식의 풀이 또한 볼 수 있었습니다.🌻🌻🌻

감사합니다.

profile
https://github.com/min731

0개의 댓글