https://school.programmers.co.kr/learn/courses/30/lessons/181187

 

프로그래머스

코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.

programmers.co.kr

 

2. 문제 접근

저도 그렇고 대부분의 풀이는 1사분면만의 정수점 개수를 구해서 네 배를 곱하는 것입니다. 아이디어도 간단하고 설정할 범위도 명백합니다. 유의할 점은 1사분면 위의 점과 양의 x축, 양의 y축 위의 점들 중 한쪽만 포함시켜야 합니다.

범위를 설정하고 x축을 기준으로 점의 개수를 구할 때 int를 써서 소수점 아래를 버렸습니다. 위의 예제에서 x=1과 r2의 교점은 (1, 2.8..), r1의 교점은 (1,1.7..)이 됩니다. 그래서 int값은 2,1이 되므로 둘을 빼면 원하는 값인 1이 나옵니다.

다만 두 교점이 둘 다 정수인 경우 예외 처리가 필요합니다. 대표적으로 y축 위 교점은 (0,3), (0,2)이므로 뺄셈을 하면 1이 나오지만 필요한 값은 2입니다.

 

다양한 방법이 있겠지만 제가 생각한 가장 단순한 방법은 1을 빼서 자체적으로 내림 처리를 하는 겁니다. 이러면 r1 또는 r2의 교점이 정수일 때를 각각 고려할 필요도 없고 r1이 자연수이므로 자연수 i에 대해 의 값이 정수가 되거나 하는 걱정을 할 필요가 없습니다.

 

from math import sqrt

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

 

+ Recent posts