1. 조건
기사단원의 수(번호): 1 <= number <= 100,000
공격력 제한 수치: 2 <= limit <= 100
제한 수치 초과한 기사의 공격력: 1 <= power <= limit
이때 기사단원의 공격력은 기사단원의 번호의 약수 갯수 만큼이다.
공격력(약수 갯수)이 제한수치를 초과한다면 해당 기사단원의 공격력은 power가 된다.
그리고 모든 기사단원의 무기를 만들어주자.
기사단원의 무기는 해당 기사단원의 공격력 만큼의 철의 무게가 소모된다.
이때 모든 기사단원의 무기를 만들기 위해 소모되는 철의 무게를 return한 값은?
2. 풀이 과정
일단 여기서 약수의 갯수를 구하는데 스킬이 필요하다.
나는 그게 없어서 일일히 1부터 기사단원의 번호만큼 순회했는데
숫자 자기자신을 제외한 모든 약수는 그 숫자의 절반보다 작거나 같다.
따라서 1부터 기사단원의 번호만큼 순회할 필요없이
1부터 기사단원의 번호 절반만큼만 순회하면 된다.
3. 풀이
function solution(number, limit, power) {
let answer = 0;
for (let cur = 1; cur <= number; cur++) {
let devisors = 0;
for (let idx = 1; idx <= cur / 2; idx++) {
if (cur % idx === 0) devisors++;
}
if (devisors + 1 > limit) {
answer += power;
} else {
answer += devisors + 1;
}
}
return answer;
}
'개발이야기 > 알고리즘' 카테고리의 다른 글
[알고리즘] 둘만의 암호 (0) | 2023.03.26 |
---|---|
[알고리즘] 크기가 작은 부분문자열 (0) | 2023.03.26 |
[알고리즘] 가장 가까운 같은 글자 (0) | 2023.03.24 |
[알고리즘] 명예의 전당 (1) (0) | 2023.03.23 |
[알고리즘] 문자열 나누기 (0) | 2023.03.23 |