본문 바로가기
개발이야기/알고리즘

[알고리즘] 기사단원의 무기

by KimHarry 2023. 3. 24.

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;
}