반응형
문제
구현
시간 효율은 나와있지 않아 모두 구해도 되겠지만
원의 특성상 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를 사용하고 각 케이스를 나눠서 풀이했다.
반응형
'Coding Test > Python' 카테고리의 다른 글
[프로그래머스] 배열 조각하기 Python 풀이 (2) | 2023.04.21 |
---|---|
[프로그래머스] 요격 시스템 python 풀이 (1) | 2023.04.17 |
[Codility] Pi Code Challenge Python (1) | 2023.04.14 |
[프로그래머스] 방의 개수 Python 풀이 (1) | 2023.04.13 |
[프로그래머스] 달리기 경주 Python 풀이 (0) | 2023.04.07 |
댓글