⭐ Lv. 2 - 카펫
Leo는 카펫을 사러 갔다가 아래 그림과 같이 중앙에는 노란색으로 칠해져 있고 테두리 1줄은 갈색으로 칠해져 있는 격자 모양 카펫을 봤습니다.
Leo는 집으로 돌아와서 아까 본 카펫의 노란색과 갈색으로 색칠된 격자의 개수는 기억했지만, 전체 카펫의 크기는 기억하지 못했습니다.
Leo가 본 카펫에서 갈색 격자의 수 brown, 노란색 격자의 수 yellow가 매개변수로 주어질 때 카펫의 가로, 세로 크기를 순서대로 배열에 담아 return 하도록 solution 함수를 작성해주세요.
brown | yellow | return |
---|---|---|
10 | 2 | [4, 3] |
8 | 1 | [3, 3] |
24 | 24 | [8, 6] |
문제를 처음 접했을 때, 주어진 값들을 바탕으로 방정식을 만들어 해결이 가능하겠다 생각하였습니다. 다만, 이보다 더 단순하게 해결이 가능할 것 같아 다음과 같이 간단하게 해결하였습니다.
- 순회를 짧게 하기 위해
yellow
를 기준으로 1부터yellow
까지 순회합니다.yellow
를 나눈 나머지가0
인i
인 경우
-i X yellow / i
로 타일 배치가 가능한 경우이므로, yellow 겉을 감싸고 있는brown
까지의 타일 수를 합한 것과(i + 2) * (yellow / i + 2)
가 동일한지 판단합니다.- 결과를 출력합니다.
function solution(brown, yellow) {
for(let i = 1; i <= yellow; i++) {
if(yellow % i === 0 && brown + yellow === (i + 2) * (yellow / i + 2)) {
return [yellow / i + 2, i + 2];
}
}
}