Leo는 카펫을 사러 갔다가 아래 그림과 같이 중앙에는 노란색으로 칠해져 있고 테두리 1줄은 갈색으로 칠해져 있는 격자 모양 카펫을 봤습니다.
Leo는 집으로 돌아와서 아까 본 카펫의 노란색과 갈색으로 색칠된 격자의 개수는 기억했지만, 전체 카펫의 크기는 기억하지 못했습니다.
Leo가 본 카펫에서 갈색 격자의 수 brown, 노란색 격자의 수 yellow가 매개변수로 주어질 때 카펫의 가로, 세로 크기를 순서대로 배열에 담아 return 하도록 solution 함수를 작성해주세요.
갈색 격자의 수 brown은 8 이상 5,000 이하인 자연수입니다.
노란색 격자의 수 yellow는 1 이상 2,000,000 이하인 자연수입니다.
카펫의 가로 길이는 세로 길이와 같거나, 세로 길이보다 깁니다.
function solution(brown, yellow) {
var answer = [];
brown-=4;
brown/=2;
for(let i=1; i<=brown; i++){
for(let j=1; j<=brown; j++){
if(i+j==brown && i*j==yellow && i>=j){
answer=[i+2, j+2];
}
}
}
return answer;
}
yellow의 개수는 brown이 정한다.
카페트의 양끝 모서리 네 부분을 빼야 하기 때문에,
brown-=4를 먼저 해준다.
그리고 yellow의 가로와 세로를 더하면 brown/2이기 때문에,
brown/=2를 해준다.
이후 이중for문을 돌린다.
i와 j의 합이 brown과 같고, i와 j의 곱이 yellow와 같으면,
answer=[i+2, j+2]를 출력해준다.
i와 j에 각각 2를 더하는 이유는 처음에 각 모서리 네 부분을 빼줬기 때문에 가로+2, 세로+2를 해주는 것이다.
ex)
brown=24, yellow=24, result=[8, 6]
brown-=4; //brown=20
brown/=2; //brown=10
이중 for문
( i+j=10(brown) && i*j=24(yellow) )이면 answer.
이때, 가로가 세로보다 길어야 한다고 했으므로, i>=j도 추가해주었다.
[1, 9] // 1+9==brown, 19!=yellow
[2, 8] // 2+8==brown, 28!=yellow
[3, 7] // 3+7==brown, 37!=yellow
[4, 6] // 4+6==brown, 46==yellow, !(i>=j)
[5, 5] // 5+5==brown, 55!=yellow
[6, 4] // 6+4==brown, 64==yellow, i>=j
i=6, j=4
answer=[6+2, 4+2] //[8, 6]