JS/알고리즘(코테)

프로그래머스 코딩테스트 LV.1 - 기사단원의 무기

주디_JUDI 2023. 8. 18. 15:53

기사단원의 무기

https://school.programmers.co.kr/learn/courses/30/lessons/136798

 

프로그래머스

코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.

programmers.co.kr

나의 풀이

function solution(number, limit, power) {
    let sum = 0;

    for (let i = 1; i <= number; i++) {
        let count = 0;

        for (let j = 1; j <= Math.sqrt(i); j++) {
            if (i % j === 0) {
                count += j === i / j ? 1 : 2; // 중복 제외
            }
        }

        sum += count > limit ? power : count;
    }

    return sum;
}
  • 해당 문제는 1부터 number까지 각각의 숫자의 약수 개수를 구한 후, 그 개수 중에 limit을 넘기는 숫자는 power로 대체하여 모두 합한 sum을 return하는 것이다.
  • 나의 풀이에서 약수는 for문을 이용하여 1부터 number까지 돌아가며 반복하고, 그 값을 Math.sqrt()로 제곱근을 만든다.
  • i = 100이면, j는 10까지 반복된다. 100이 1부터 10까지 돌아가며 나머지값이 0이 되는지 확인한다.
  • count += j === i / j ? 1 : 2를 위의 예시로 이해해보자.
    • i = 100이고, j = 1이면 100/1 했을 때 100과 1로 두 개를 곱해서 100을 만들기 때문에 count += 2 를 한다.
    • i = 100이고, j = 10이면 100/10을 했을 때 10을 제곱하여 100을 만들기 때문에 count += 1 을 한다.
  • 그리고 마지막으로 약수의 개수 count가 limit을 초과하면 power로 대체하여 sum에 누적하고, 아니라면 그대로 count를 누적하여 sum을 반환한다.