문제
프로그래머스
코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.
programmers.co.kr
메모
좀더 효율적인 약수 구하는 식을 익혀두자.
정답
const getDivisors = num => {
const divisors = [];
for (let i = 1; i <= Math.floor(Math.sqrt(num)); i++) {
if (num % i === 0) {
divisors.push(i);
if (num / i !== i) {
divisors.push(num / i);
}
}
}
return divisors;
};
function solution(number, limit, power) {
let arr = [];
for (let i = 1; i <= number; i++) {
const divisorsLength = getDivisors(i).length > limit ? power : getDivisors(i).length;
arr.push(divisorsLength);
}
return arr.reduce((a, b) => a + b);
}
// 시간 초과
function solution(number, limit, power) {
const arr1 = Array(number)
.fill(1)
.map((a, b) => a + b);
const arr2 = [];
for (let i = 0; i < number; i++) {
arr2.push(
Array(arr1[i])
.fill(1)
.map((a, b) => a + b)
.filter(x => arr1[i] % x === 0).length
);
}
const arr3 = arr2.map(x => (x > limit ? power : x));
return arr3.reduce((a, b) => a + b);
}