[알고리즘/C#] 프로그래머스 - 점 찍기 (원의 방정식)

0시0분·2024년 8월 15일
0

알고리즘

목록 보기
16/23

👀 풀이 방법
예전에 풀었던 이 문제에서 힌트를 얻었다.
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;
    }
}

0개의 댓글