맨처음 짜봤던 초안..
'약수의 갯수를 어떻게 구할 것인가?'
'숫자의 범위는 어떻게 구할 것인가?'
를 우선적으로 고민해봤다.

코딩 시작!
let b = [];
function solution(left, right){
for (let i = left; i < right+1; i++){
b.push(i);
}
for (let j = 0; j < b.length; j++){
let h = b[j]
let divisor = []
let counter = 0
for (let k = 1; k < h+1 ; k++)
if (h%k === 0) {
divisor.push(k)
counter += 1
}
console.log(divisor)
console.log(counter)
}
}
solution(13, 17)
출력값.
내가 짜놓고 아래처럼 왜나오는지 이해를 못함..

그래서 console.log(counter)의 위치를 변경.
counter는 약수의 갯수만큼 계속해서 돌아가고, divisor에는 약수의 값이 들어가는 걸 확인.
계속 보다보니 counter, divisor의 값이, h에 들어있는 숫자(13,14,15,16,17) 가 한 번 끝나면 초기화되는 거 같다는 생각이 들었다. 그래서 한차례 돌고나서 초기화 되기 전에 변수에다가 넣어주면 될 거 같은데? 라는 생각에..

counting이라는 약수의 갯수를 받아줄 수 있는 변수를 하나 만들어줬다.
여기서 divisor 을 넣을지.. counter를 넣을지 고민하다가 우선 divisor을 push.
하지만 내가 생각했던 그림이 아니었다. counting에 숫자별 약수가 그대로 들어가서 배열 안에 배열이 들어가 있는 형태로 출력이 되었다.
그래서 counter를 사용해야한다는 것을 인지!

counter를 counting에 push 했더니 내가 원했던 배열로 출력이 되었다.

위에 것들이 다 끝나고 나서는 그리 어려운 일이 아니었다.
counting을 가지고 와서 counting에 있는 약수의 갯수에 따라 양수를 만들건지 음수를 만들건지 정해서 result라는 변수 안에 값을 넣고 연산을 돌려주면 끝!

그래도 꾸준히 계속 들은 보람이 있다..?
클로저?? 스코프?? 이전에 파이썬을 배울 때는 이런 거에 대한 기초지식이 없어서 이거 넣었다가 저거 넣었다가 하면서 겨우겨우 문제를 해결했는데 자바스크립트는 강좌도 꽤 많이 듣고 여러가지 찾아보면서 공부를 했더니 문제를 풀 때, '이 변수는 불러올 수 있겠다 없겠다.'를 조금이나마 인지를 하고 코드를 짤 수 있었다.
그리고 for문의 흐름을 조금이나마 이해할 수 있게 되었다. 이전에는 for문이 여러개 있으면 복잡해서 손으로 쓰지 않으면 이해하기 힘들었는데 이번에 코드를 짜면서 이해도가 약간 상승한 거 같다는 느낌이 들었다 :) (물론 이거보다 복잡한 건 아직 무리..)
++잘 모르겠으면 console.log() 를 여러 곳에서 많이 쳐보자!!
아래는 완성본 코드.
let b = []; // left~right 숫자 담기
let counting = []; // 각 숫자별 약수의 갯수 담기
let result = 0; // 숫자별로 덧셈 뺄셈
function solution(left, right){ // left~right 까지의 숫자 뽑아내기.
for (let i = left; i < right+1; i++){
b.push(i);
}
for (let j = 0; j < b.length; j++){
let h = b[j] // b에 담겨있는 거 순서대로 하나씩 뽑아내기.
let counter = 0;
for (let k = 1; k < h+1 ; k++)
if (h%k === 0) {
counter += 1;
}
counting.push(counter);
}
for (let l = 0; l < counting.length; l++){ // left~right 숫자들의 양수, 음수 판별해주고 result에서 연산.
if (counting[l] % 2 ===0){ // 약수의 갯수가 짝수면 양 / 홀수면 음
result += b[l]; // 양
} else {
result += b[l]*-1; // 음
}
}
return result;
}