코드
// brown = 2가로 + 2세로 -4
// brown - 2세로 +4 = 2가로
// 가로 = 0.5brown - 세로 +2
// yellow = (0.5brown - 세로) * (세로 - 2)
// yellow = -세로^2 + (0.5brwon + 2)세로 -brown
// 세로^2 - (0.5brown +2)세로 + brown + yellow = 0
// brown+yellow의 약수중에 가로와 세로가 있다
function solution(brown, yellow) {
let result = [];
let divisorArr = findDivisor(brown + yellow);
for (let i = 0; i < divisorArr.length; i++) {
if (divisorArr[i] ** 2 - (0.5 * brown + 2) * divisorArr[i] + brown + yellow === 0)
result.unshift(divisorArr[i]);
}
if (result.length === 1) result.push(result[0]);
return result;
}
function findDivisor(n) {
const divisors = [];
for (let i = 1; i <= Math.sqrt(n); i++) {
if (n % i === 0) {
divisors.push(i);
if (n / i != i) divisors.push(n / i);
}
}
divisors.sort((a, b) => a - b);
return divisors;
}
brown + yellow의 약수 배열을 구하고
그 안에서 가로와 세로를 찾음
가로와 세로가 같을 경우 추가적으로 push해줌
처음 접근을 2차방정식 말고 갈색+노란색 === 사각형 넓이임을 이용해서 풀어도 됨
'코딩 테스트 > 프로그래머스 level2' 카테고리의 다른 글
예상 대진표 (0) | 2022.09.09 |
---|---|
영어 끝말잇기 (0) | 2022.09.09 |
다음 큰 숫자 (0) | 2022.09.09 |
다리를 지나는 트럭 (0) | 2022.09.09 |
피보나치 수 (0) | 2022.09.08 |