[프로그래머스] Lv2. 두 원 사이의 정수 쌍- JavaScript

이상돈·2023년 7월 19일
0
post-thumbnail

문제분류 : 코팅테스트 연습

난이도 : Level 2

출처 : 프로그래머스 - 두 원 사이의 정수 쌍

문제

제한사항

📌 내가 생각한 풀이

각각의 원안의 존재하는 점의 총 개수를 구하자.
+ 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 변수에 추가해주었다.

profile
사람들의 더 나은 삶을 위한 개발자

0개의 댓글