두 원 사이의 정수 쌍
문제 설명
제한 사항
입출력 예r1r2result
입출력 예 설명
x축과 y축으로 이루어진 2차원 직교 좌표계에 중심이 원점인 서로 다른 크기의 원이 두 개 주어집니다. 반지름을 나타내는 두 정수 r1, r2가 매개변수로 주어질 때, 두 원 사이의 공간에 x좌표와 y좌표가 모두 정수인 점의 개수를 return하도록 solution 함수를 완성해주세요.
※ 각 원 위의 점도 포함하여 셉니다.
제한 사항
- 1 ≤ r1 < r2 ≤ 1,000,000
입출력 예r1r2result
2 | 3 | 20 |
입출력 예 설명
그림과 같이 정수 쌍으로 이루어진 점은 총 20개 입니다.
정답 풀이
import math
def solution(r1, r2):
answer = 0
for x in range(1, r2 + 1):
y_max = math.floor(math.sqrt(r2 ** 2 - x ** 2))
y_min = 0 if x >= r1 else math.ceil(math.sqrt(abs(r1 ** 2 - x ** 2)))
answer += y_max - y_min + 1
return answer * 4
- 우선 원의 1/4만큼만 구해서 곱하기 4를 한다.
- x^2 + y^2 = r^2을 이용하여 y^2 = r^2 - x^2을 이용하여 푼다.
- y_max는 각 x에서의 최대 높이 값으로, r2의 원 내의 가장 높은 높이를 구하고 floor()를 한다.
- y_min은 각 x에서의 최소 높이 값으로, x가 r1을 넘을 경우는 r1을 지난 경우이므로 0으로 하고, 아닐 경우에는 r1 내의 가장 높은 높이를 구하고 ceil()을 한다.
- floor()와 ceil()을 해도 상관없도록 answer에 추가할 때마다 1씩 더해준다.
- 마지막으로 리턴시 곱하기 4를 하여 원 전체를 포함하도록 한다.
728x90
'파이썬 알고리즘 문제 풀이' 카테고리의 다른 글
[프로그래머스] Lv2. 숫자 변환하기 / DP 😑 (0) | 2024.09.27 |
---|---|
[프로그래머스] Lv2. 미로 탈출 / BFS (0) | 2024.09.26 |
[프로그래머스] Lv1. 키패드 누르기 / 카카오 인턴 (0) | 2024.09.23 |
[프로그래머스] [PCCP 기출문제] 2번 / 석유 시추 🙁 (1) | 2024.09.22 |
[프로그래머스] Lv2. 캐시 / 2018 KAKAO BLIND RECRUITMENT (2) | 2024.09.19 |