https://programmers.co.kr/learn/courses/30/lessons/42842
function solution(brown, yellow) {
let totalBlock = brown + yellow;
for (let a = 3; a < brown / 2 + 1; a++) {
// a는 세로 b는 가로
if (totalBlock % a !== 0) {
continue;
}
let b = ((brown - 2 * a + 4) / 2);
if (b === totalBlock / a) {
if (a >= b) {
return [a, b];
} else {
return [b, a];
}
}
}
}
일단 갈색블럭과 노란색 블럭을 합친값은 total 블럭값이다.
가로와 세로길이를 곱한것도 total 블럭값이다.
갈색블럭 = 2( 세로 - 2 ) + 2( 가로 - 2)
노란블럭 = total - 갈색블럭 = 가로 * 세로 - 갈색블럭
따라서
한가지식을 세울수 있다.
가로 = ((갈색 - 2*세로 + 4) /2 );
세로는 3부터 시작가능하며 세로는 갈색의 반 이상이 될수가 없다.
세로를 3부터시작해서 위식을 만족하는 가로가 있을때
세로 * 가로가 total이라면 해당하는 값이 가로 세로가 가능하다.
문제에서 숫자가 큰순으로 출력하라고 했으므로 반환을 큰순으로 한다.