👀 풀이 방법
예전에 풀었던 이 문제에서 힌트를 얻었다.
1사분면에 존재하는 점의 개수만 구하면 되므로 훨씬 단순한 문제였다.
각 x좌표 값을 기준으로 해당 좌표에 해당하는 원 위의 점을 구하고, 그 점의 y 좌표 값보다 작은 정수들의 개수를 더해주면 된다.
처음엔 개수를 더하는것도 for문을 돌렸는데 시간 초과가 났다. 고민하다 그냥 나누면 된다는걸 깨닫고 k값으로 나눈 후에 +1을 했다. (축 위의 점도 포함해야 함)
using System;
public class Solution {
// (x - a)^2 + (y - b)^2 = r^2
// x^2 + y^2 = r^2
// y^2 = r^2 - x^2
private double CalcY(int r, int x)
{
return Math.Sqrt(Math.Pow(r, 2) - Math.Pow(x, 2));
}
public long solution(int k, int d)
{
long answer = 0;
for (int x = 0; x <= d; x += k)
{
double rDist = Math.Floor(CalcY(d, x));
answer += ((long)rDist / k) + 1;
}
return answer;
}
}