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

UBIN·2023년 12월 4일
0

문제

중심이 (0,0)이고 반지름이 1 ≤ r1 < r2 ≤ 1,000,000 인 원 2개가 주어질 때 반지름 r1인 원과 반지름 r2인 원 사이에 존재하는 점들 중 (정수, 정수)인 좌표의 개수를 구해라. (경계선 포함)

ex)

r1, r2 = 2, 3

정수로 이루어진 좌표들의 특징은 x축, y축으로 대칭을 이룬다는 것이다.
즉, 1개의 사분면에 대해서만 개수를 구해주고 4배를 해주면 된다. 단, 주의할 점이 있는데 x축이나 y축 둘 중 한쪽은 포함하지 않아야 4배를 했을 때 정답이 된다. 그렇지 않으면 중복해서 개수에 포함이된다.

나머지 설명은 코드 주석으로 하겠다.

전체코드

def solution(r1, r2):
    answer = 0

    maxY, minY = 0, 0
    
    # 1사분면만 구하고 4배를 해주기 위해 y축은 제외
    for x in range(1, r2 + 1):
    	# 큰 원 기준으로 y를 구해주고 가까운 정수로 내려주면 
        # 현재 정수 x에서 가질 수 있는 최대 정수 y
        maxY = math.floor(math.sqrt(r2**2 - x**2))
        if x >= r1:
            minY = 0
        else:
        	# 작은 원 기준으로 y를 구해주고 가까운 정수로 올려주면
            # 현재 정수 x에서 가질 수 있는 최소 정수 y
            minY = math.ceil(math.sqrt(r1**2 - x**2))
        
        answer += (maxY - minY + 1) * 4

    return answer
profile
ubin

0개의 댓글