문제
https://school.programmers.co.kr/learn/courses/30/lessons/181187
프로그래머스
코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.
programmers.co.kr
문제 개요
중심이 원점인 두 개의 원이 주어진다. 두 원은 서로 다른 크기의 반지름 r1과 r2를 가지고 있다. 이때, 두 원 사이에 있는 공간(즉, 작은 원과 큰 원 사이의 영역)에 x좌표와 y좌표가 모두 정수인 점의 개수를 구하는 문제
아이디어
- 원의 방정식: 중심이 (0, 0)이고 반지름이 r인 원의 방정식(x2+y2=r2x^2 + y^2 = r^2 기반으로, 주어진 x에 대해 y의 가능한 값을 계산할 수 있다
- 범위 설정: 두 원 사이의 공간에 있는 점을 찾으려면, 각 x값에 대해:
- 큰 원 (r2)의 방정식에서 y의 최대 값을 찾고,
- 작은 원 (r1)의 방정식에서 y의 최소 값을 찾습니다.
- 큰 원에서 가능한 y의 최대 값은 y= √r2² - x ²
- 작은 원에서 가능한 y의 최소 값은 y= √ r1² - x ² }
- 계산 범위: x축 위에서 반지름이 주어졌을 때, 첫 번째 사분면에서 각 x값에 대해 가능한 정수 y값의 범위를 구하고, 이를 네 사분면에 대칭적으로 적용하여 전체 좌표를 구합니다.
class Solution {
public long solution(int r1, int r2) {
long answer = 0;
for (int x = 1; x <= r2; x++) {
long maxY_r2 = (long) Math.floor(Math.sqrt((long)r2 * r2 - (long)x * x));
long minY_r1 = (long) Math.ceil(Math.sqrt((long)r1 * r1 - (long)x * x));
answer += maxY_r2 - minY_r1 + 1;
}
return answer * 4;
}
}
'문제 > 프로그래머스' 카테고리의 다른 글
[프로그래머스] [PCCP 기출문제] 3번 / 충돌위험 찾기 - Java (0) | 2024.09.30 |
---|---|
[프로그래머스] [PCCP 기출문제] 2번 / 퍼즐 게임 챌린지 - Java (0) | 2024.09.14 |
[프로그래머스] 가장 긴 팰린드롬 - Java (0) | 2024.09.10 |
[프로그래머스] 연속 펄스 부분 수열의 합 - Java (1) | 2024.09.09 |
[프로그래머스] 호텔 방 배정 - Java (0) | 2024.09.03 |