
-Code
class Solution {
public long solution(int k, long d) {
long answer = 0;
// x값을 k만큼 증가하며 계산
for (long x = 0; x <= d; x += k) {
// 최대 y값 구하기
long yMax = (long) Math.sqrt(d * d - x * x);
// y값도 k씩 증가하므로 갯수 구하기
// 0의 위치를 포함하므로 +1
answer += yMax / k + 1;
}
return answer;
}
}
2중 for문은 10^12이 최악의 시간이라 시간 초과가 나기 때문에 for문을 1개만 쓰는 방향으로 잡았고 그 과정에서 +k로 돌아가데 처음에 짰습니다.
하지만 거리 계산 수식을 실수해서 틀리고 계산 수식의 잘못된 부분을 수정하고 y축도 k로 만큼씩 이동하기 때문에 k로 나누어 answer에 더했습니다.
한 가지 더 중요한 점은 각 지점 시작이 0부터 이기 때문에 1을 더해야 하는 것을 생각하지 못해 한 번 더 틀렸고 이를 알게 되고 적용하여 해결했습니다.
'알고리즘 문제 > Java' 카테고리의 다른 글
| [프로그래머스/Java] 3 x n 타일링 (0) | 2026.05.11 |
|---|---|
| [프로그래머스/Java] 두 원 사이의 정수 쌍 (0) | 2026.05.10 |
| [프로그래머스/Java] 과제 진행하기 (0) | 2026.05.08 |
| [프로그래머스/Java] 미로 탈출 (0) | 2026.05.07 |
| [프로그래머스/Java] 시소 짝꿍 (0) | 2026.05.06 |