본문 바로가기
알고리즘 문제/Java

[프로그래머스/Java] 점 찍기

by 현장 2026. 5. 9.

-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을 더해야 하는 것을 생각하지 못해 한 번 더 틀렸고 이를 알게 되고 적용하여 해결했습니다.