기사단원의 무기
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을 반환한다.
'JS > 알고리즘(코테)' 카테고리의 다른 글
프로그래머스 코딩테스트 LV.0 - 문자열이 몇 번 등장하는지 세기 (0) | 2023.08.23 |
---|---|
프로그래머스 코딩테스트 LV.1 - 덧칠하기 (0) | 2023.08.05 |
프로그래머스 코딩테스트 LV.1 - 가장 가까운 같은 글자 (0) | 2023.07.23 |
프로그래머스 코딩테스트 LV.1 - 소수 만들기 (0) | 2023.07.22 |
프로그래머스 코딩테스트 LV.1 - 과일 장수 (0) | 2023.07.18 |