수포자는 웁니다 ㅠㅠ
제가 푼 코드를 gpt 선생님에게 자세히 알려달라고 하였습니다 ㅠㅠ
문제풀이 방식은 각 기사의 번호에 대한 약수의 개수를 계산하고, 그 개수가 제한 수치를 초과하면 지정된 공격력(power)으로 대체하는 방식입니다. 코드를 살펴보고 각 부분에 대한 설명과 함께 검증해 보겠습니다.
주석이 포함된 코드 검증 및 설명
function solution(number, limit, power) {
// 기사 번호의 약수 개수를 계산하는 함수
const getArmor = (num) => {
let index = 1;
let result = [];
// 제곱근 풀이법을 사용하여 약수를 찾습니다.
// 제곱근 까지만 확인해서 약수를 찾고, 그 약수의 쌍을 추가합니다.
for(let i = 1 ; i <= Math.sqrt(num) ; i++){
if(num % i === 0) {
result.push(i);
if(num / i !== i) result.push(num / i); // 제곱근일 경우 중복 추가를 방지합니다.
}
}
return result.length; // 약수의 개수를 반환합니다.
}
// 기사 번호 배열을 생성합니다.
const knights = Array.from({length: number}, (_, i) => i + 1);
// 각 기사의 공격력을 계산합니다.
const allPowers = knights.map((e, i) => {
const attackPower = getArmor(e);
// 공격력이 제한 수치를 초과하면 지정된 공격력으로 대체합니다.
return attackPower > limit ? power : attackPower;
});
// 모든 기사의 공격력 합을 계산합니다.
const sum = allPowers.reduce((acc, cur) => acc + cur, 0);
return sum; // 필요한 철의 무게를 반환합니다.
}
// 테스트 코드
function testSolution() {
const testCases = [
{ number: 5, limit: 3, power: 2, expected: 10 },
{ number: 10, limit: 3, power: 2, expected: 21 },
];
testCases.forEach(({ number, limit, power, expected }, index) => {
try {
const result = solution(number, limit, power);
if (result !== expected)
throw new Error(`Expected ${expected}, but got ${result}`);
console.log(`Test ${index + 1}: Passed`);
} catch (error) {
console.log(`Test ${index + 1}: Failed - ${error.message}`);
}
});
}
// 테스트 함수 호출
testSolution();
코드 설명
getArmor
함수:- 주어진 숫자
num
의 약수 개수를 계산합니다. - 제곱근 풀이법을 사용하여 약수를 찾습니다. 이는
i
가num
의 약수일 때num / i
도num
의 약수임을 이용합니다. 이 방법은 효율성을 높여줍니다. result.push(i)
와result.push(num / i)
를 통해 약수를 저장하며, 제곱근일 경우 중복을 방지합니다.- 최종적으로 약수의 개수를 반환합니다.
- 주어진 숫자
- 기사 번호 배열 생성:
Array.from({length: number}, (_, i) => i + 1)
를 사용하여 1부터number
까지의 기사 번호 배열을 생성합니다.
- 기사별 공격력 계산:
knights.map
을 통해 각 기사의 공격력을 계산합니다.getArmor
함수를 호출하여 약수의 개수를 구하고, 이 값이limit
를 초과하면power
로 대체합니다.
- 공격력 합 계산 및 반환:
reduce
를 사용하여 모든 기사의 공격력 합을 계산합니다.- 최종적으로 필요한 철의 무게(공격력 합)를 반환합니다.
이 접근 방식은 효율적이고, 문제의 요구 사항을 충실히 따르고 있습니다. 테스트 케이스를 통해 결과를 확인하여 올바르게 동작하는지 검증하시면 됩니다.
'algorithm' 카테고리의 다른 글
[240618 TIL] Sliding Window (0) | 2024.06.18 |
---|---|
[240612 TIL] 완전탐색, 비트연산자 (0) | 2024.06.12 |
코테16 - 덧칠하기 (0) | 2024.05.27 |
코테15 - 소수만들기 (0) | 2024.05.24 |
코테14 - 가장 가까운 같은 글자 (0) | 2024.05.24 |