문제 설명
두 정수 left와 right가 매개변수로 주어집니다. left부터 right까지의 모든 수들 중에서, 약수의 개수가 짝수인 수는 더하고, 약수의 개수가 홀수인 수는 뺀 수를 return 하도록 solution 함수를 완성해주세요.
제한사항
1 ≤ left ≤ right ≤ 1,000
생각해본 풀이방법
1. for문을 통해서 left부터 right까지의 숫자를 배열에 넣어준다.
2. 배열 안에 있는 숫자들의 약수를 구하기 위해 포문을 또 돌려줘야할듯
3. 약수 자체가 필요한게 아니라 약수의 개수가 필요한거임.
count 가 짝수면 해당하는 인덱스의 숫자는 더하고
홀수면 빼게 삼항연산자를 또 걸어주는...휴 엄청 복잡하다
일단 함 식 써보면서 생각정리 해보겠음
let arr = []
for( left; left<=right; left++){
arr.push(left)
}
console.log(arr)
콘솔 찍어보니 잘 담겨있다.
이제
2. 배열 안에 있는 숫자들의 약수의 개수를 구해주기
let answer = 0
for (let i= 0; i<arr.length; i++){
let count = 0
for(let j= 1; j<=arr[i]; j++){
if (arr[i]%j == 0){
count++}
}
if (count%2==0){
answer = answer + arr[i]
} else {
answer = answer - arr[i]
}
}
휴;;;;; count 변수선언 이상한곳에 해서 누적 집계 돼서 애먹었다.........
걍 쓰다보니 줄줄 써져서 구구절절 포문 범벅 답안 완~
최종 답안
function solution(left, right) {
let answer = 0;
let arr = [];
for( left; left<=right; left++){
arr.push(left)
}
for (let i= 0; i<arr.length; i++){
let count = 0 ;
for(let j= 1; j<=arr[i]; j++){
if (arr[i]%j == 0){
count++}
}
if (count%2==0){
answer = answer + arr[i];
} else {
answer = answer - arr[i];
}
}return answer;
}
1점.... 냠냠...
다른 사람 답안
function solution(left, right) {
var answer = 0;
for (let i = left; i <= right; i++) {
if (Number.isInteger(Math.sqrt(i))) {
answer -= i;
} else {
answer += i;
}
}
return answer;
}
제곱근이 정수면 약수의 개수가 홀수... 넵....