1import math
2
3def calc1(r):
4 result = 0
5 for i in range(1, r):
6 result += math.floor(math.sqrt(r**2 - i**2))
7 return result*4 + r*4 + 1
8
9def calc2(r):
10 result = 0
11 for i in range(1, r):
12 a = math.sqrt(r**2 - i**2)
13 result += math.floor(a)
14 if a % 1 == 0:
15 result -= 1
16 return result*4 + r*4 + 1
17
18def solution(r1, r2):
19 return calc1(r2)-calc2(r1)+4
문제
- 두 원의 반지름 r1, r2가 주어진다.
- 두 원 사이의 공간에 x좌표와 y좌표가 모두 정수인 점의 개수를 구하라
- 이때, 각 원 위의 점도 포함하여 센다.
- TC
- input
r1:2, r2:3
- ouput
20
- input
해결방법
- ( 원의 1사분면에 존재하는 점의 개수 * 4 + 축에 있는 점 + 원점) 과 같은 방식으로 구한다
- 큰 원과 작은 원을 계산할 때 로직이 조금 다른데, 작은 원의 테두리에 걸친 점은 답에 포함시켜야한다는 것을 주의한다.
느낀 점
- 작은 원에서 고려해야하는 사항을 생각해내지못해 오래 걸렸다.