본문 바로가기
기초다지기/JS 코딩테스트

javaScript 코드 계산 (기사단원의 무기)

by 김빵그 2024. 1. 22.

문제 

기사 번호지정 1부터 number까지, 무기점에서 무기를 구매할 때 자신의 기사 번호의 약수 개수에 해당하는 공격력 가진 무기를 구매할 수 있다. 제한수치보다 큰 공격력을 가진 무기라면 정해지는 공격력을 가진 무기를 구매해야 함. 

공격력 1당 1kg의 철이 필요하다면 무기점에서 모든 무기를 만들기 위해 필요한 철의 무게는?

풀이 

function solution(number, limit, power) {
    var result = [];
    var aa = 0;

    for (var i = 1; i <= number; i++) {
        result.push(i);

        var currentNumber = result[i - 1];
        var count = 0;

        for (var j = 1; j <= currentNumber; j++) {
            if (currentNumber % j === 0) {
                count++;
            }
        }

        aa += (count <= limit) ? count : power;
    }

    return aa;
}
  • 첫 코드.. 풀리긴 했지만 시간 초과로 실패
function solution(number, limit, power) {
    let answer = 0;

    for (let i = 1; i <= number; i++) {
        let aa = 0;
        const sq = Math.sqrt(i);

        for (let j = 1; j <= sq; j++) {
            if (i % j === 0) {
                aa += (j === sq) ? 1 : 2;
            }
        }

        if (aa <= limit) {
            answer += aa;
        } else {
            answer += power;
        }
    }

    return answer;
}
  • for 
    • 1부터 number까지 반복하고 각 숫자에 대한 약수를 찾는 중첩 루프 사용
    • sq를 사용해 불필요한 계산 줄임
    • if(i % j ===0) : 약수 찾기
    • sq ? 1: 2 제곱근이 정수일 때와 아닐때 약수 중복 여부 처리
    • limit과 비교해서 결과값 반환

 

 

다른 풀이

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;
}
function solution(number, limit, power) {
    var answer = 0;
    for (let n = 1; n <= number; n++) {
        for (let j = 1; j * j <= n; j++) {
            let count = (j * j === n) ? 1 : (n % j === 0) ? 2 : 0;
            answer += count;
        }
        if (answer > limit) answer = power;
    }
    return answer;
}
function solution(number, limit, power) {
    const sum = (num) => {
        let res = 0;
        for (let i = 1; i * i <= num; i++) {
            if (i * i === num) res++;
            else if (num % i === 0) res += 2;
        }
        return res;
    };
    return Array.from({ length: number }, (el, i) => i + 1)
        .map((el) => (sum(el) > limit ? power : sum(el)))
        .reduce((acc, cur) => acc + cur, 0);
}

'기초다지기 > JS 코딩테스트' 카테고리의 다른 글

javaScript 지뢰찾기게임  (0) 2024.01.29
javaScript 소수 찾기  (0) 2024.01.23
javaScript 과일 장수  (0) 2024.01.18
javaScript 캐시 계산  (0) 2024.01.15
javaScript 2차원 배열 중복 계산 문제  (0) 2024.01.12