알고리즘/프로그래머스

[프로그래머스] 카펫 (코딩테스트 연습 | 완전탐색)

KyuminKim 2024. 9. 9. 23:06

문제

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

 

프로그래머스

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

programmers.co.kr


아이디어

✅ '테두리 (Brown)이 1줄이다'

  • 즉, yellow의 공약수 두 수 a, b 를 구하고 (a * b = yellow)
  • (a + 2) * (b + 2) = (총 직사각형 넓이) 인 경우를 구해 b+2, a+2를 반환한다

 

공약수는 어떻게 구하는가?

  • for문을 이용해 1부터 yellow로 탐색

코드

import math

def solution(brown, yellow):
    answer = []
    
    # 전체 넓이
    area = brown + yellow
    
    # 공약수 구하기
    for i in range(1, yellow+1):
        if yellow % i == 0:
            if (i + 2) * (yellow/i + 2) == area:
                return [yellow/i + 2, i+2]