본문 바로가기

IT/Python

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

728x90

2차원 직교 좌표계에서 중심이 원점인 서로 다른 크기의 두 원의 사이$($경계 포함$)$ 점 중에서 좌표가 모두 정수인 점의 개수를 구하는 문제

 

더보기

문제 설명
x축과 y축으로 이루어진 2차원 직교 좌표계에 중심이 원점인 서로 다른 크기의 원이 두 개 주어집니다. 반지름을 나타내는 두 정수 r1, r2가 매개변수로 주어질 때, 두 원 사이의 공간에 x좌표와 y좌표가 모두 정수인 점의 개수를 return하도록 solution 함수를 완성해주세요.
※ 각 원 위의 점도 포함하여 셉니다.

제한 사항

  • 1 ≤ r1 < r2 ≤ 1,000,000

 

접근 방법:

x축의 양의 부분을 포함하여 1사분면 위의 점의 개수를 구한 후, 그 값의 4배를 출력

다음 두 구간 0 ≤ y < r1 과 r1 ≤ y < r2 으로 구분해서 개수를 구함

$x^2 + y^2 = r^2$

$x^2  = r^2 - y^2$
원의 방정식을 통해 내부 점을 구하고, int()를 활용해 정수인지 확인함

import numpy as np

def solution(r1, r2):
    answer = 0
    
    for y in range(r1):
        answer += int(np.sqrt(r2 ** 2 - y ** 2)) - int(np.sqrt(r1 ** 2 - y ** 2))
        if int(np.sqrt(r1 ** 2 - y ** 2)) == np.sqrt(r1 ** 2 - y ** 2):
            answer += 1
            
    for y in range(r1, r2):
        answer += int(np.sqrt(r2 ** 2 - y ** 2))
        
     
    return answer * 4

 

 

 

더보기

입출력 예

r1 r2 result
2 3 20