[프로그래머스] 완전탐색(Brute Force) - 카펫 (Python)

Daisy 🌼·2022년 7월 21일
0

프로그래머스

목록 보기
2/36
post-thumbnail

문제출처 : 프로그래머스

👻 문제

  • 문제 설명
    Leo는 카펫을 사러 갔다가 아래 그림과 같이 중앙에는 노란색으로 칠해져 있고 테두리 1줄은 갈색으로 칠해져 있는 격자 모양 카펫을 봤습니다.

    Leo는 집으로 돌아와서 아까 본 카펫의 노란색과 갈색으로 색칠된 격자의 개수는 기억했지만, 전체 카펫의 크기는 기억하지 못했습니다. Leo가 본 카펫에서 갈색 격자의 수 brown, 노란색 격자의 수 yellow가 매개변수로 주어질 때 카펫의 가로, 세로 크기를 순서대로 배열에 담아 return 하도록 solution 함수를 작성해주세요.

  • 제한사항
    갈색 격자의 수 brown은 8 이상 5,000 이하인 자연수입니다.
    노란색 격자의 수 yellow는 1 이상 2,000,000 이하인 자연수입니다.
    카펫의 가로 길이는 세로 길이와 같거나, 세로 길이보다 깁니다.

  • 입출력 예

👩‍💻 My cording

풀이 : for문, if문 활용

# 카펫의 가로, 세로 크기를 순서대로 배열에 담아 return
def solution(brown, yellow):
    answer = []
    # yellow의 가로, 세로 길이 초기화
    yellow_x = 0
    yellow_y = 0
    for i in range(1, yellow+1):
        # i x yellow/i = yellow가 성립되기 위한 if 문
        if yellow%i == 0:
            yellow_x = int(yellow/i)
            yellow_y = i
            # brown의 가로, 세로를 a, b라고 가정했을 때
            # yellow는 (a-2)(b-2)가 성립
            # 따라서, brown의 개수는 brown의 넓이 ab - yellow의 넓이 (a-2)(b-2)
            # ab - (a-2)(b-2) = 2a+2b+4 = brown의 개수
            if yellow_x*2 + yellow_y*2 + 4 == brown:
                answer.append(yellow_x + 2)
                answer.append(yellow_y + 2)
                return sorted(answer, reverse = True) # 오름차순 정렬
        
    return answer

💡check point

1) brown의 개수 = brown의 넓이 (ab) - yellow의 넓이 (a-2)(b-2)
→ ab - (a-2)(b-2) = 2a+2b+4
2) 2번째 if문이 1번째 if문에 종속되어야만 올바른 결과를 출력한다.

profile
세상을 이롭게하는 AI Engineer

0개의 댓글