처리조건
풀이
테스트 케이스의 brown과 yellow에 의한 return 값을 자세히 보자. b와 y의 합은 return 값을 곱한게 된다.
b+y의 약수를 구해보면 10,2에서 합은 12가 되고 [1,12], [2,6], [3,4] 가 된다. 순서대로 나열하면 1,2,3,4,6,12가 된다.
각 1,2,3중 가장 큰수인 3이 return 값의 y축이 되며 b+y를 y축으로 나누면 x축을 구할 수 있다.
sqrt를 사용해 for문을 최소한으로 돌리는 약수 찾기 함수를 생성하여 b+y를 인자로 전달한 뒤 1,2,3을 담아 내림차순으로 정렬하여 리턴해주게 된다. 받은 1,2,3을 for문으로 다시 돌려 각 1,2,3마다 x,y축을 구하며 가운데 노란카페트가 깔리면 그 주위에는 1개의 갈색 테이블들이 깔린다는 점을 이용해 x-2와 y-2를 곱하면 가운데 노랑색이 나와야한다. 해당 조건에 일치하는 x,y를 구하자마자 바로 return 하며 for문을 종료시킨다.
function solution(brown, yellow) {
let start = brown + yellow;
let arrY = isPrimeNumber(start);
for (let i = 0; i < arrY.length; i++) {
let [x, y] = [start / arrY[i], arrY[i]];
if ((x - 2) * (y - 2) === yellow) return [x, y];
}
}
let isPrimeNumber = (n) => {
let result = [];
if (n < 2) {
return false;
}
// i<=Math.sqrt(n) 대신 i*i <= n 이 더 바람직한 코드이다.
// 실수를 사용하는 것은 바람직하지 않기 때문.
for (let i = 2; i <= Math.sqrt(n); i++) {
if (n % i === 0) {
result.push(i);
}
}
result.sort(function (a, b) {
if (a > b) return -1;
if (a === b) return 0;
if (a < b) return 1;
});
return result;
};
'일반 학습 > 코딩 테스트' 카테고리의 다른 글
[프로그래머스] 피로도 (0) | 2022.03.25 |
---|---|
[프로그래머스] 큰 수 만들기 (0) | 2022.03.24 |
[프로그래머스] H-Index (0) | 2022.03.24 |
[프로그래머스] 다리를 지나는 트럭 (0) | 2022.03.23 |
[프로그래머스] 위장 (0) | 2022.03.22 |
댓글