[프로그래머스] 기사단원의 무기

최유나·2024년 8월 23일
0

프로그래머스

목록 보기
48/53

✨ 기사단원의 무기

나의 풀이

function solution(number, limit, power) {
    let answer = 0;
    
    for(let i = 0; i <= number; i++){
        let count = 0; // 약수의 개수 저장
        const sqrt = Math.sqrt(i); // 제곱근
        
        for(let idx = 1; idx <= sqrt; idx++){
            if(i % idx === 0){
                if(i / idx === idx){
                    count += 1;
                } else {
                    count += 2;
                }
            } 
        }
        if(count > limit){
            answer += power     
        }
        else {
            answer += count;
        }
    }
    return answer;
}

1. 매개변수
number : 기사단원의 수
limit : 공격력 제한 수치
power : 제한수치를 초과한 기사가 사용할 무기의 공격력

2. 약수의 개수

for(i = 1부터 N의 제곱근까지){
  if (N 을 i 로 나눈 나머지가 0이면){
    if (N / i 의 값이 i 이면){ 약수의 개수는 1}
    else{ 약수의 개수는 2}
  }
}

3. 제곱근으로 구하는 이유
반복문의 범위를 줄이기 위해 사용

4. 풀이

answer은 무기를 만들기 위해 필요한 철의 총 무게를 담기 위한 변수이다.
우선 기사 번호를 구해야 하기 때문에 반복문을 사용하며 1번 예제처럼 1~5까지 반복을 돌려 기사 번호를 나타낸 다음 약수의 개수를 구해야 한다.

count로 약수의 개수를 저장할 변수. sqrt는 제곱근을 계산할 변수를 설정한다.
idx는 1부터 i의 제곱근까지 설정하고 반복한다. i % idx === 0이면 idx는 i의 약수를 나타내는 것을 설정 한 후 idxi의 정확한 제곱근일 때는 1만 증가 시키고 아닐때는 2만큼 증가 시킨다.

왜냐하면 idxi / idx는 약수가 서로 다르기 때문.

그 다음 공격력 제한에 따른 무게 계산을 해야하는데 계산된 약수의 개수가 limit보다 큰지 확인한 후, 크면 공격력을 power로 설정하고 answer을 더한다. 만약 작다면 약수에 개수 countanswer을 더해 구한다.

난 이게 어렵다 ㅠㅠ 왜지 ㅠㅠ

다른사람의 풀이


function solution(number, limit, power) {
    var answer = 0;
    for (let n = 1; n <= number; n++)
    {
        let count = 0;
        for (let j = 1; j * j <= n; j++)
        {
            if (j * j == n) count++;
            else if (n % j == 0) count += 2;
        }
        if (count > limit) count = power;
        answer += count;
    }
    return answer;
}

0개의 댓글

관련 채용 정보