본문 바로가기

Programmers

[프로그래머스][JAVA]Lv. 2 - 점 찍기

https://school.programmers.co.kr/learn/courses/30/lessons/140107

 

프로그래머스

코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.

programmers.co.kr

조건 d만큼의 최대 거리가 주어지고 a*k, b*k식으로 떨어지는 위치에 찍힌 점의 개수를 구하는 문제

class Solution {
    public long solution(int k, int d) {
        long answer = 0;
        for (int i = 0; i <= d; i+=k) {
            double d2 = (double) d*d;
            double i2 = (double) i*i;
            double n = Math.sqrt(d2 - i2);
            long cnt = (long) n/k;
            answer += cnt + 1;
        }
        return answer;
    }
}

피타고라스 정리를 이용하여 문제를 풀었다

점까지의 최대 거리인 d를 변 a로 하고, k씩 늘어나는 i를 또 다른 변 b로 했을 때, 구하고자 하는 다른 한 변을 c라고 하면 c^2 = a^2 - b^2이 된다

이렇게 구한 c는 해당 i점에서의 최대 높이이고, c를 k로 나누면 그 점에서의 점의 개수를 알 수 있었다

그렇게 k씩 늘어나는 i에서의 모든 점들을 합친 answer를 정답으로 출력하여 문제를 해결하였다

주어진 k와 d가 1,000,000까지 값으로 제공될 수 있기 때문에 double형으로 형변환하였다