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형으로 형변환하였다
'Programmers' 카테고리의 다른 글
[프로그래머스][JAVA]Lv. 2 - 테이블 해시 함수 (0) | 2024.03.11 |
---|---|
[프로그래머스][JAVA]Lv. 2 - 디펜스 게임 (1) | 2024.02.26 |
[프로그래머스][JAVA]Lv. 2 - 귤 고르기 (0) | 2024.02.19 |
[프로그래머스][JAVA]Lv. 2 - 숫자 카드 나누기 (0) | 2024.01.31 |
[프로그래머스][JAVA]Lv. 2 - 혼자 놀기의 달인 (0) | 2024.01.31 |