나의 답
def check(brown, yellow,x,y):
b = x*y-((x-2)*(y-2))
y = (x-2)*(y-2)
if brown == b and yellow == y:
return 1
else:
return 0
def solution(brown, yellow):
cnt = brown+yellow
arr = []
for i in range(3,cnt+1): # 약수 구하기
if cnt%i==0:
arr.append(i)
for value in arr: # 약수 조합 활용
x = value
y = int(cnt/value)
if check(brown, yellow,x,y): # 가로, 세로 값에 따라서 brown, yellow 충족 확인
return [x,y] if x>y else [y, x]
return 0
약수를 활용해서 문제 풀었다....
가로, 세로 값에 따라서 충족 확인Ss.
다른 사람 풀이
거의 다들 약수를 이용해서 풀었는데 근의 공식을 이용해서 푼 풀이가 있었따 .. .
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]
x^2-(a+b)x + ab = 0 이런식으로 되어있었다 라고 생각한다면,
brown = a*b - ((a-2)*(b-2)) = -4 +2(a+b)
-> a+b = (brown+4)/2 라는 것을 알 수 있음
brown + yellow -> 전체 면적 수 == 넓이 == 근의 곱 (a*b)
a+b => 근의 합 : (brown+4)/2 가 되는 것이고
ab => 근의 곱 : (yellow+brown)이 되는 것
그래서 a, b의 해를 구할 수 있고, a는 가로, b는 세로가 된다. 와 . . .
'코딩테스트' 카테고리의 다른 글
[이것이 코딩테스트다] Chapter 2. 구현 - 실전문제 / 게임 개발 (0) | 2024.03.18 |
---|---|
[이것이 코딩테스트다] Chapter 2 구현 실전문제 왕실의 나이트 (0) | 2024.03.18 |
[프로그래머스] 완전탐색 - 최소직사각형 (0) | 2024.03.18 |
[이것이 코딩테스트다] Chapter 2. 구현 (0) | 2024.03.16 |
[이것이 코딩테스트다] Chapter 02. 그리디 (0) | 2024.03.08 |