Coding Test
[JavaScript] 두 원 사이의 정수 쌍
mooni_
2025. 5. 19. 11:23
Q. 문제
x축과 y축으로 이루어진 2차원 직교 좌표계에 중심이 원점인 서로 다른 크기의 원이 두 개 주어집니다. 반지름을 나타내는 두 정수 r1, r2가 매개변수로 주어질 때, 두 원 사이의 공간에 x좌표와 y좌표가 모두 정수인 점의 개수를 return하도록 solution 함수를 완성해주세요.
※ 각 원 위의 점도 포함하여 셉니다.
* 문제풀이흐름
1. x² + y² ≤ r² : 원 안에 존재, x² + y² ≥ r² : 원 밖에 존재, r1² ≤ x² + y² ≤ r2² : 두 원 사이에 존재의 개념을 활용
2. 가능한 y의 개수 = max - min + 1을 누적
3. 1사분면에 대해서만 계산했기 때문에 마지막에 * 4 하여 return
A. 풀이
function solution(r1, r2) {
let answer = 0;
//x좌표를 1~r2까지 반복
for (let x = 1; x <= r2; x++) {
//반지름 r2인 바깥 원 안에 들어갈 수 있는 y의 최대값
//x^2 + y^2 <= r2^2을 만족하는 y중 가장 큰 정수 y
const maxY = Math.floor(Math.sqrt(r2*r2 - x*x));
//반지름 r1인 작은 원 바깥에 있을 수 있는 y의 최소값
//x^2 + y^2 >= r1^2을 만족하는 y중 가장 작은 정수 y
const minY = Math.ceil(Math.sqrt(Math.max(0, r1*r1 - x*x)));
//가능한 y값의 개수 누적
answer += maxY - minY + 1;
}
//4사분면 고려하여 * 4
return answer * 4;
}