thumbnail

[lv.1] 기사단원의 무기 | 프로그래머스

[lv.1] 기사단원의 무기 | 프로그래머스

📋 [ 프로그래머스 ] 시리즈 몰아보기 (17)

✏️ (lv.1) : 기사단원의 무기

각 기사에게는 1부터 number까지 번호가 지정되어 있다. 각 기사는 자신의 기사 번호의 약수 개수에 해당하는 공격력을 가진 무기를 구매하려 한다. 이때, 구매하려는 무기의 공격력이 limit보다 클 경우, 공격력이 power에 해당하는 무기를 구매한다. 기사단이 구매한 모든 무기의 공격력의 합을 return하는 solution을 작성하라.


  • 1 <= number <= 100000

  • 2 <= limit <= 100

  • 1 <= power <= limit


약수의 개수를 number만큼 구해야 하기 때문에 시간복잡도가 낮은 알고리즘이 필요하다.

  • fill()map() 메소드를 이용해 배열에 1 ~ number까지 숫자를 채우는 동시에 로직을 진행한다.

  • Math.sqrt()를 이용해 제곱근을 구하고 target과 비교해가며 약수를 구한다.

          
1 function solution(number, limit, power) {
2 let result = 0;
3 const arr = Array(number).fill().map((e, i) => {
4 let target = i+1;
5 return devisor(target);
6 });
7
8 arr.forEach((e) => {
9 if (e > limit) {
10 result += power;
11 } else {
12 result += e;
13 }
14 });
15
16 return result;
17 }
18
19 const devisor = (target) => {
20 let result = new Set();
21 for (let i=1; i<Math.sqrt(target)+1; i++) {
22 if (target%i === 0) {
23 result.add(i);
24 if (target/i != 0) result.add(target/i);
25 }
26 };
27
28 return result.size;
29 };
# 프로그래머스
# JS
# javascript
# 알고리즘
# 코딩테스트
# 약수

💡 로그인 하지 않아도 댓글을 등록할 수 있습니다!

👨‍💻 관련 포스트