본문 바로가기
Coding Test/Python

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

by giem 2023. 4. 17.
반응형


문제


구현

시간 효율은 나와있지 않아 모두 구해도 되겠지만

원의 특성상 1,2,3, 4분면의 형태가 같기에 1 사분면에서만 점의 개수를 구해주고 *4를 해주도록 한다.

 

겹치기 않게 x는 1부터 r2까지 확인하면서 구하고

y의 최대 최소 좌표를 계산한다.

x**2+y**2=r**2 이므로 y**2 = r**2-x**2이다.

양 변에 루트를 씌워주면 y값을 구할 수 있다.

y(r2)-y(r1) 사이의 모든 정수를 구하면 된다.

 

추가적으로 x가 r1보다 커지는 상황에서는 y(r1) 상관없이 최대 좌표까지의 모든 정수를 더해주면 된다.


코드
def solution(r1, r2):
    answer = 0
    for x in range(0,r2):
        max_y = (r2**2-x**2)**0.5
        min_y = 0 if x>=r1 else (r1**2-x**2-1)**0.5
        answer += int(max_y)-int(min_y)

    return answer*4

위의 구현을 토대로 작성한 코드다.


다른 풀이
from math import sqrt

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

같은 풀이지만 조금 더 읽기 쉬운 코드다.

**0.5 대신 sqrt를 사용하고 각 케이스를 나눠서 풀이했다.

반응형

댓글