[프로그래머스] 기사단원의 무기
2022. 12. 22. 19:00ㆍ기록/Programmers
- 목차
문제 링크
https://school.programmers.co.kr/learn/courses/30/lessons/136798
프로그래머스
코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.
programmers.co.kr
나의 문제 풀이
function solution(number, limit, power) {
let answer = 0;
const countArr = [];
for (let num = 1; num <= number; num++) {
let count = 0;
for (let i = 1; i <= Math.sqrt(num); i++) {
if (num % i === 0) {
if (num / i === i) {
count += 1;
} else {
count += 2;
}
}
}
countArr.push(count > limit ? power : count);
}
answer = countArr.reduce((acc, cur) => acc + cur, 0);
return answer;
}
- 1부터 주어진 숫자까지 반복
- 1부터 i의 제곱근까지 반복하면서 약수인지 판별함 (중복 카운트 방지)
- num을 i로 나눈 나머지가 0일 경우 i는 num의 약수임
- 나머지와 몫이 같을 경우 i만 num의 약수임
- 예) 16 / 4 === 4
- 약수 갯수 변수에 +1
- 나머지와 몫이 다를 경우 i와 나머지는 num의 약수임
- 예) 16 / 2 !== 2
- 16 / 2 === 8
- 약수 갯수 변수에 +2 (약수 2, 8)
- 나머지와 몫이 같을 경우 i만 num의 약수임
- 약수 갯수가 limit 보다 클 경우
- 카운트 배열에 power 를 넣음
- 아닐 경우 카운트 배열에 약수 갯수를 넣음
- 카운트 배열의 요소들을 누적하여 정답 변수에 할당하고 리턴함
다른 사람의 문제 풀이
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;
}