[lv.1] 기사단원의 무기 | 프로그래머스
[lv.1] 기사단원의 무기 | 프로그래머스
📋 [ 프로그래머스 ] 시리즈 몰아보기 (17)
✏️ (lv.1) : 기사단원의 무기
각 기사에게는 1부터 number까지 번호가 지정되어 있다. 각 기사는 자신의 기사 번호의 약수 개수에 해당하는 공격력을 가진 무기를 구매하려 한다. 이때, 구매하려는 무기의 공격력이 limit보다 클 경우, 공격력이 power에 해당하는 무기를 구매한다. 기사단이 구매한 모든 무기의 공격력의 합을 return하는 solution을 작성하라.
1 <=
number<= 1000002 <=
limit<= 1001 <=
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 | }; |
👨💻 관련 포스트
[lv.1] 개인정보 수집 유효기간
[lv.1] 개인정보 수집 유효기간
프로그래머스 lv.1 개인정보 수집 유효기간 풀이 with javascript. 해당 문제에서 한달은 28일로 고정이다. 따라서 today와 privacies 각 원소(개인정보)의 날짜를 년, 월, 일에 각 단위에 해당하는 수 * 28을 수행하여 일 단위로 변환한 후 terms에 해당하는 수를 더해 문제를 해결한다.
2023-05-30
[lv.1] 성격 유형 검사하기 | 프로그래머스
[lv.1] 성격 유형 검사하기 | 프로그래머스
프로그래머스 lv.1 성격 유형 검사하기 풀이 with javascript. javascript의 객체를 이용해 성격 유형(이하 MBTI)별 획득 점수를 기록하고 MBTI의 value를 비교해 문제를 해결한다.
2023-06-01
[lv.2] 주차 요금 계산 | 프로그래머스
[lv.2] 주차 요금 계산 | 프로그래머스
프로그래머스 lv.2 주차 요금 계산 풀이 with javascript. javascript의 객체를 이용해 차량의 입/출차 시간을 기록, 해당 객체를 순회하며 주차시간을 주어진 요금표에 맞게 정산하는 것으로 문제를 해결한다.
2023-06-04
💡 로그인 하지 않아도 댓글을 등록할 수 있습니다!