★ 문제
두 정수 left와 right가 매개변수로 주어집니다. left부터 right까지의 모든 수들 중에서, 약수의 개수가 짝수인 수는 더하고, 약수의 개수가 홀수인 수는 뺀 수를 return 하도록 solution 함수를 완성해주세요.
(1 ≤ left ≤ right ≤ 1,000)
★ 문제 해결 과정
1. left부터 right까지 모든 숫자에 대해 1부터 i까지 나눠 떨어지는 숫자(약수)를 찾는다
(i로 나눴을 때 나머지가 0)
2. 약수의 개수가 짝수면 더하고, 홀수면 빼도록 한다.
다른 사람들의 답변 중 가장 신기했던건 "약수는 대칭을 이루는데 제곱근만이 자기 자신과 대칭을 이루기 때문에 제곱근이 정수면 약수의 개수가 홀수다." 라는 사실을 이용해서 푼 답변이다.
확실히 수학적인 지식이 없어도 풀 수가 있기는 하지만 가지고 있다면 어쩔 땐 더 효율적인 방법으로 풀 수 있는 것 같다.
★ 제출한 문제 답안
function solution(left, right) {
let sum = 0;
for(let i = left; i <= right; i++){
let divisor = [];
for(let j = 1; j <= i; j++){
if(i % j === 0) divisor.push(j);
}
divisor.length % 2 === 0 ? sum += i : sum -= i;
}
return sum;
}
'스파르타 (React_6기) 본캠프' 카테고리의 다른 글
2024. 09. 27.(알고리즘 - 부족한 금액 계산하기) (0) | 2024.09.30 |
---|---|
2024. 09. 26.(알고리즘 - 문자열 내림차순으로 배치하기) (0) | 2024.09.27 |
아웃소싱 팀프로젝트 피드백 정리 (1) | 2024.09.23 |
2024. 09. 22.(팀프로젝트 - 아웃소싱03) (0) | 2024.09.23 |
2024. 09. 19.(팀 프로젝트 - 아웃소싱02) (0) | 2024.09.20 |