각각의 원안의 존재하는 점의 총 개수를 구하자.
+ 1사분면에 존재하는 점의 개수 * 4
- 중복으로 센 점의 개수
= 점의 총 개수
⭐️ 또한 여기서 중요한 것은 3^2 + 4^2 = 5^2 처럼 원 위에 존재하는 점의 개수도 구해주어야한다.
const get = r => {
let max = r;
let count = 0;
let start = 0;
let isOn = 0;
while (start <= r) {
let len = Math.sqrt(start ** 2 + max ** 2);
while (len > r) {
max -= 1;
len = Math.sqrt(start ** 2 + max ** 2);
}
if (Number.isInteger(Math.sqrt(start ** 2 + max ** 2))) isOn++;
count += max + 1;
start++;
}
return [count * 4 - r * 4 - 3, isOn * 4 - 4];
};
function solution(r1, r2) {
let a = get(r1);
let b = get(r2);
if (a[1] !== 4) {
return b[0] - a[0] + a[1];
} else {
return b[0] - a[0] + 4;
}
}
작은 원 위에 존재하는 점의 개수 예외를 생각하지 못했다. 작은 원위의 존재하는 점은 Number.isInterger로 정수인지 판별해서 isOn 변수에 추가해주었다.