프로그래머스 점 게임 JavaScript
2023년 1월 13일
문제 풀이
2차원 좌표평면에서 원점(0, 0)으로부터 x축 방향으로 a*k(a = 0, 1, 2, ...), y축 방향으로 b*k (b = 0, 1, 2, ...) 만큼 떨어진 위치에 점들을 찍는 문제, 이때 원점과 거리가 d를 넘는 위치에는 점을 찍지 않는다.
매개 변수 k와 d의 범위는 1 <= k, d <=1,000,000 이기에 x, y 둘다 for 문을 돌게 되면 시간이 초과되니 원의 방정식 x^2 + y^2 = r^2 을 이용한다.
거리가 d를 넘을 수 없으므로 반지를을 d로 잡고 x값에 따라 y의 최댓값을 구해 그 아래의 k 배수의 수를 세어준다. (0도 포함하기 때문에 +1 해준다)
solution.js
function solution(k, d) {
let answer = 0;
const dSquare = d * d;
for (let x = 0; x <= d; x += k) {
const maxY = Math.sqrt(dSquare - x*x);
const yCnt = Math.floor(maxY / k) + 1;
answer += yCnt;
}
return answer;
}