[프로그래머스] 카펫

    문제 정보

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

     

    프로그래머스

    코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.

    programmers.co.kr

     

    문제 분석

    우선 yellow 값을 소인수분해하여 yellow의 약수를 구합니다. (A * B 형태, A < B) 

    소인수분해한 각 case에 대하여 brown 값을 구합니다 => (B + 2) * 2 + A * 2

    주어진 brown 값과 같은 case의 가로, 세로 크기를 리턴합니다 => [B+2, A+2]

     

    풀이 코드

    def getCase(num):
        case = [] 
        for i in range(1, 2000001):
            if num // i < i:
                return case
            if num % i == 0:
                case.append([num//i, i])
    
    def solution(brown, yellow):
        answer = []
        
        yCase = getCase(yellow)
        
        for y, x in yCase:
            if (y+2)*2+x*2 == brown:
                answer = [y+2, x+2]
                return answer

    댓글