728x90
반응형
문제 출처:https://school.programmers.co.kr/learn/courses/30/lessons/181187
풀이:
import math
def solution(r1, r2):
answer = 0
for x in range(1,r2+1):
# x 값을 가져옴
max_y = math.floor(math.sqrt(r2 ** 2 - x ** 2)) # 큰 반지름 기준
min_y = 0 if x>r1 else math.ceil(math.sqrt(r1 ** 2 - x ** 2)) # 작은 반지름 기준
print(x, max_y,min_y)
answer += max_y- min_y + 1
print(answer)
return answer*4
print(solution(2,3))
원의 방정식을 생각해보면
위에 x = 0 y = 0 r = 2 인 원의 방정식이면 x^2 + y^2 = 2^2 이다
그러면 x가 0 이면 2 x가 1이면 루트3 x가 2 이면 0 이다. 이것을 내림을 해주면 각 x별 그 원에서 포함되는 정수값을 구할 수 있다.
우선 max_y 는 큰 원의 반지름으로 한다. r = 3 일때 나오는 y값들은 max_y 라 칭하고
min_y는 작은원 r1으로 할때 나오는 값을 담아준다.
근데 여기서 r1보다 x가 클 경우가 있다 위에 코드에서는 x = 3 이고 r1 =2 일때 그러면 제곱근을 구할 수 없어 도메인 에러가난다.
math.domian.error : 근이 없는 식, 허근의 식을 적어놓으면 ValueError: math domain error 발생
그걸 해결하기위해서 x 가 > r1 보다 클때는 0 으로 고정해준다.
반응형
댓글