처음에는 너무 쉽게 이중 loop
를 사용했다가
시간초과로 호되게 당했다.^^
이 문제를 풀기 위해서는 loop
1개를 이용해야 합니다.
loop
1개만 사용하기 위해서는 수학적 개념을 알아야 합니다.
class Solution {
public long solution(int k, int d) {
long answer = 0;
for(long x = 0; x <= d; x += k) {
// 최대로 가질수 있는 y 값
// x^2 + y^2 = d^2 -> y^2 = d^2 - x^2
long maxY = (long) Math.sqrt(Math.pow(d, 2) - Math.pow(x, 2));
// y에서 k배 단위로만 점을 찍을 수 있기 때문에 k로 나눈다.
// 1을 더하는 이유는 x가 0인 (0, y)를 고려한다.
answer += (maxY / k) + 1;
}
return answer;
}
}