[프로그래머스] 카펫 [완전탐색] [python] Level2
문제 설명
Leo는 카펫을 사러 갔다가 아래 그림과 같이 중앙에는 노란색으로 칠해져 있고 테두리 1줄은 갈색으로 칠해져 있는 격자 모양 카펫을 봤습니다.
Leo는 집으로 돌아와서 아까 본 카펫의 노란색과 갈색으로 색칠된 격자의 개수는 기억했지만, 전체 카펫의 크기는 기억하지 못했습니다.
Leo가 본 카펫에서 갈색 격자의 수 brown, 노란색 격자의 수 yellow가 매개변수로 주어질 때 카펫의 가로, 세로 크기를 순서대로 배열에 담아 return 하도록 solution 함수를 작성해주세요.
구현 및 설계
접근 방법
먼저 우리가 구하는 가로와 세로의 길이를 x, y라고 하겠습니다.
가장 바깥 테두리는 brown으로 채워져 있으니 yello의 가로 세로 길이는 x-2,y-2이 됩니다.
yello의 가로, 세로 길이를 a, b라고 하겠습니다.
이 a, b는 yello의 약수 중에 존재 합니다.
고로 for문을 돌려 약수들을 검사하면서 yellow = a*b, brown = 2(a+2+b+2)+4 을 검사 하며 조건에 맞는
a와 b를 찾을 수 있습니다! 이제 a+2,b+2를 반환해주어 해결이 가능합니다.
my_solution
def solution(brown, yellow):
# 1
for a in range(1, int(yellow ** 0.5) + 1):
if yellow % a == 0:
# 2
b = yellow // a
# 3
if 2 * a + 2 * b + 4 == brown:
return [b + 2, a + 2]
1. yellow의 약수를 찾는다.
2. b = yellow // a 를 통해 a와 짝이 되는 yellow의 약수를 찾습니다.
3. 만약 brown == 2 * a + 2 * b + 4 조건을 만족한다면
카펫의 가로, 세로길이인 [b + 2, a + 2]를 반환해주어 해결 할 수 있습니다.
'알고리즘 문제풀이 > 프로그래머스' 카테고리의 다른 글
[프로그래머스] 올바른 괄호 [연습문제] [python] (0) | 2020.09.25 |
---|---|
[프로그래머스] 튜플 [2019 카카오 개발자 겨울 인턴십] [python] (0) | 2020.09.25 |
[프로그래머스] 위장 [해시] [python] (0) | 2020.09.24 |
[프로그래머스] 가장 큰 정사각형 찾기 [연습문제] [python] (0) | 2020.09.23 |
[프로그래머스] 구명 보트 [탐욕법(Greedy)] [python] (0) | 2020.09.23 |