문제 설명
프로그래머스 2단계의 문제입니다.
위와 같은 카펫이 있을 때 갈색, 노란색의 영역의 숫자를 통해 너비와 높이를 구하는 문제입니다.
세로는 가로보다 같거나 길고 yellow는 1보다 큽니다.
풀이
def solution(brown, yellow):
max_len = brown // 2
for h in range(3, max_len):
for w in range(3, max_len):
if (w + h) * 2 - 4 == brown and (w - 2) * (h - 2) == yellow:
return [w, h]
변수 설명
max_len: 가로 혹은 세로로 가장 길 수 있는 길이입니다. 사각형의 4변의 합의 1/2으로 설정했습니다.
간단 설명
가로, 세로를 max_len
만큼 순회하며 아래 두가지 조건이 만족하는 가로, 세로를 구합니다.
1. (가로 + 세로) * 2 - 4
를 한 값이 brown과 같을 경우
이때 4를 빼는 이유는 위의 옅은 갈색의 경우 4변을 모두 더하면 4가 더 추가해서 계산되기 때문입니다.
2. (가로 - 2) * (세로 * 2)
를 한 값이 yellow와 같을 경우
2씩 제거하는 이유 위아래로 1씩 2, 양옆으로 1씩 2 이렇게 각각을 빼 yellow 영역의 가로, 세로를 구합니다.
위 두가지 조건이 모두 맞을 경우 가로, 세로를 반환합니다.
'개발 > 알고리즘 문제 풀이' 카테고리의 다른 글
[프로그래머스] 최솟값 만들기 (0) | 2021.03.23 |
---|---|
[프로그래머스] 쿼드압축 후 개수 세기 (0) | 2021.03.22 |
[프로그래머스] (1차) 캐시 (0) | 2021.03.22 |
[프로그래머스] 신규 아이디 추천 (0) | 2021.03.08 |
[프로그래머스] 올바른 괄호 (0) | 2021.02.26 |