python/알고리즘 문제풀이

[프로그래머스 | 파이썬3] 카펫- 완전탐색

빛날희- 2021. 7. 14. 01:29

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

 

코딩테스트 연습 - 카펫

Leo는 카펫을 사러 갔다가 아래 그림과 같이 중앙에는 노란색으로 칠해져 있고 테두리 1줄은 갈색으로 칠해져 있는 격자 모양 카펫을 봤습니다. Leo는 집으로 돌아와서 아까 본 카펫의 노란색과

programmers.co.kr

> 완전탐색

yellow의 약수가 될 수 있는 경우의 수 중 조건문을 만족하는 수가 있으면 해당 수들을 반환하는 함수로 작성하였다. 

결과를 도출하기까지 다음 세가지 조건을 걸었다. 

 

1) yellow의 약수가 되는 조건- yellow이하의 수 중 yellow의 약수가 되는 수가 있으면 그 수와 함께 짝을 이루는(곱했을 때 yellow가 나오는) 수를 j로 지정

2) 만약 j(가로)가 i(세로)보다 짧으면 문제의 조건에 어긋나고 i와 j를 통해 구할 수 있는 약수는 구한 상태이므로 반복문을 중지시킨다. 

3)  j에 2를 더한 값(전체 사각형의 가로), i에 2를 더한 값(전체 사각형의 세로)의 곱에서 yellow 사각형을 뺀 값이 brown 사각형의 수와 같으면 해당 width와 height가 답이 된다. 

def solution(brown, yellow):
    # yellow의 약수구하기
    for i in range(1,yellow+1):
        if yellow % i ==0:
            j= yellow // i
            
            # 가로가 세로보다 짧으면 반복문 중지
            if j<i: 
                break
                
            width= j+2
            height= i+2
           
            if width*height - yellow == brown:
                return [width, height]