문제
요약
- 직사각형 모양의 카펫의 테두리는 갈색, 나머지 안쪽 부분은 노란색으로 칠해져있다.
- 노란색과 갈색 크기가 주어지면, 가로, 세로 크기를 반환하자.
- 가로 길이 >= 세로 길이
분류
- 완전탐색
풀이
1. 내 풀이
- 어떤 자연수가 두 자연수의 곱으로 이루어져 있다고 하자. 두 자연수를 구하기 위해서는, 어떤 자연수를 1부터 어떤 자연수의 제곱근까지로 차례로 나눠보면 된다. (자연수의 약수를 떠올려 보자.)
def solution(brown, yellow):
root_num = int(yellow ** (1 / 2)) if yellow != 1 else 1
for i in range(1, root_num + 1):
if yellow % i == 0:
if i * 2 + (yellow / i) * 2 + 4 == brown:
return [(yellow / i) + 2, i + 2]
2. 수학 (근의 공식)
- 가로 길이를 x, 세로 길이를 y라고 하자
- 넓이 : xy = brown + yellow
- 둘레 : 2(x-2) + 2y = brown
<식 정리>
- y = (brown + yellow) / x (x != 0)
- 2(x-2) + 2(brown+yellow) / x = brown
- 2x^2 - (4 + brown)x + 2(brown + yellow) = 0
- 짝수 공식으로 식 세운다.
import math
def solution(brown, yellow):
w = ((brown+4)/2 + math.sqrt(((brown+4)/2)**2-4*(brown+yellow)))/2
h = ((brown+4)/2 - math.sqrt(((brown+4)/2)**2-4*(brown+yellow)))/2
return [w,h]