[프로그래머스-Level 1] [JavaScript] 기사단원의 무기 - 약수의 개수 구하기
2022. 11. 23. 22:53ㆍ알고리즘/프로그래머스 알고리즘 공부
반응형
[문제]
기사단원의 수 numbers, 공격력의 제한 수치 limit, 제한 수치를 초과하는 경우에 제한되는 무기의 공격력을 나타내는 power가 존재합니다. 기사단원의 수가 3일 때, 기사단원1, 기사단원2, 기사단원3이 존재하며 각 기사단원의 약수 개수에 해당하는 공격력을 가진 무기를 구매해야 하며 제한 수치를 초과하는 경우, 제한되는 무기의 공격력이 됩니다. 이 모두를 더한 값을 구하는 것이 문제입니다.
[알고리즘]
제곱근 및 반복문 사용
[풀이]
약수의 개수를 구하는 것이 핵심으로 일반 for 반복문을 사용하여 1부터 해당 숫자까지 하나씩 체크해서 구해주는 방법이 물론 가능하지만 시간 초과로 인해 통과하지 못하기 때문에, 이 경우 시간 복잡도를 줄이기 위해 Math.sqrt 제곱근 함수를 사용해서 복잡도를 줄여주면 됩니다.
function solution(number, limit, power) {
var answer = 0;
const arr = [];
for (let n = 1; n <= number; n++) {
let count = 0;
for (let i = 1; i <= Math.sqrt(n); i++) {
if (n % i === 0) {
// 예제 16 / 4 === 4 경우
// 약수의 개수 1 추가
if (n / i === i)
count++;
// 16 / 2 === 2는 false 이기 때문에
// 2, 8에 해당 되는 약수 2개를 카운트에 더합니다.
else
count = count + 2;
}
}
arr.push(count);
}
for (let i = 0; i < arr.length; i++) {
if (arr[i] <= limit)
answer += arr[i];
else
answer += power;
}
return answer;
}
반응형
'알고리즘 > 프로그래머스 알고리즘 공부' 카테고리의 다른 글
[프로그래머스-Level 1] [JavaScript] 햄버거 만들기 - 스택(Stack) 활용 (0) | 2022.11.27 |
---|---|
[프로그래머스-Level 1] [JavaScript] 푸드 파이트 대회 - sort(정렬) 활용 (0) | 2022.11.24 |
[프로그래머스-Level 1] [JavaScript] 콜라 문제 - 재귀 함수 활용 (0) | 2022.11.23 |
[프로그래머스-Level 0] [Javascript] 분수의 덧셈(최대공약수 이용) (0) | 2022.10.29 |
[프로그래머스-Level 0] [Javascript] 배열 두 배 만들기 (0) | 2022.10.03 |