나의 풀이
문제를 해결하기 위해 끄적이다가 결국엔 약수
를 구하는 아이디어로 접어들었다. 전체 넓이와 노란색 영역 넓이의 관계를 생각해보다가 다음을 만족한다는 사실을 발견했다. $ yellow_area = (width-2)*(height-2) $ 잘 이해되지 않는다면 다음 사진처럼 노란색을 움직인다는 아이디어로 접근해보자.
def solution(brown, yellow):
total = brown + yellow
for i in range(3, total//2):
if total % i == 0:
width,height = (total//i),i
if (width-2)*(height-2) == yellow:
return (width, height)
return -1
다른 풀이 구경하기
나는 넓이:넓이 관계에 집중했다면 다른 풀이에서는 넓이:둘레 상관관계로 접근한 것도 있었다. 전체 둘레에서 한 칸을 갈색 타일에 대응시키면 각 모서리(즉 4개)가 더블 카운팅되는데, $ 2*(height+width) = (brown - 4) $ 만족시키는지 확인하는 방법도 존재했다.
def solution(brown, red):
for i in range(1, int(red**(1/2))+1):
if red % i == 0:
if 2*(i + red//i) == brown-4:
return [red//i+2, i+2]