Oops, All Code!/🤯 Oops, My Algorithm!
♡̈ 04. 프로그래머스:: 기사단원의 무기
밍동망동
2024. 7. 8. 23:43
이건 내가 제일 처음 풀었던 약수 구하는 문제에서 한 단계 더 나아간 것 같다.
약수의 개수를 먼저 구하고, 공격력을 구해야할 듯하다.
어떻게 단계를 나눌지 엄청 고민했는데 결국 다음과 같이 나누었다.
1. 각 기사의 번호에 대한 약수 계산
2. 그 약수의 개수에 따른 공격력 결정
3. 공격력이 제한수치를 초과하면, 협약기관의 공격력 적용
4. 필요한 철의 무게 모두 합산
function solution(number, limit, power) {
let totalWeight = 0;
function getDivisorCount(num) {
let count = 0;
for (let i = 1; i <= Math.sqrt(num); i++) {
if (num % i === 0) {
count++;
if (i !== num / i) {
count++;
}
}
}
return count;
}
for (let i = 1; i <= number; i++) {
let attackPower = getDivisorCount(i);
if (attackPower > limit) {
attackPower = power;
}
totalWeight += attackPower;
}
return totalWeight;
}
새로운 코드
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;
}
조금 더 간결한 코드이다.
j * j <= n을 이용해 제곱근까지 약수를 탐색한다.
단일 함수에서 모든 작업을 수행하지만, 직관력은 부족한 것 같다.
효율적이고 간결하지만, 직관성이 떨어지며 크게 성능차이가 나지 않기 때문에
나는 내가 작성한 코드가 낫다고 생각한다.