코딩 테스트/프로그래머스 level2

카펫

fullfish 2022. 9. 9. 01:26

코드

// 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