본문 바로가기
프로그래머스/2단계

(Python/LV2) 두 원 사이의 정수 쌍

by windy7271 2023. 4. 15.
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 으로 고정해준다.

반응형

댓글