[프로그래머스] 두 원 사이의 정수 쌍

eenzeenee·2023년 5월 25일

CodingtestPractice

목록 보기
4/13

문제 링크

원의 방정식을 이용하여 푸는 문제
(x**2 + y**2 = r**2 -> y(양수) = root(r**2 - x**2))

def solution(r1, r2):
    answer = 0
    # 1사분면만 확인하기
    for i in range(1, r2):
        num2 = int((r2**2 - i**2)**(1/2)) # 반지름이 r2인 원에서 x좌표가 i인 가장 높은 y좌표 구하기 <- 원의 방정식
        if i >= r1:
            # i가 r1보다 크면 -> 0 ~ num2까지 모든 점이 두 원 사이에 존재
            answer += 4*(num2+1)
        else:
            # i가 r1보다 작으면 -> num1 ~ num2까지만 두 원 사이에 존재
            num1 = int((r1**2 - i**2)**(1/2)) # 반지름이 r1인 원에서 x좌표가 i인 가장 높은 y좌표 구하기 <- 원의 방정식
            if num1**2 + i**2 == r1**2:
                # 내부 원 경계에 찍힌 점을 포함하는 경우
                answer += 4*(num2 - num1 + 1)
            else:
                # 내부 원 경계에 찍힌 점을 포함하지 않는 경우
                answer += 4*(num2 - num1)
    return answer + 4 # 외부 원 경계의 점 4개 더하기 -> (0,r2), (0,-r2), (r2,0), (-r2,0)
profile
Steadily

0개의 댓글