반응형
https://school.programmers.co.kr/learn/courses/30/lessons/181187
<문제 풀이>
- 처음에 2중 for문으로 문제를 쉽게 하려했으나 역시 시간초과가 발생했다. for문을 한번만 쓰는 방법으로 해결했다.
- 1사분면과 하나의 축 위에 있는 점만 계산하여 x4로 return 한다.
- 축 위에 있는 점의 수는 r2 - r1 이며 r1 위에 있는 점도 가능하기 때문에 +1 을 해준다.
- 0 < y < r2 사이의 y좌표를 따라 반복문을 진행한다.
- 해당 y좌표에서 r2 내에 있는 좌표를 모두 answer 값에 더해주며 이때 r1 내에 있는 좌표는 배제한다.
<Code>
import math
def solution(r1, r2):
answer = 0
pow_r1 = r1**2 # r1의 제곱값
pow_r2 = r2**2 # r2의 제곱값
for i in range(1, r2): # x축 위의 점은 빼고 계산하기 위해 1부터 시작(y좌표)
# 반지름이 r2 부채꼴 내에서 y좌표가 i인 지점에서 나올수 있는 점의 수
answer += math.floor(math.sqrt(pow_r2 - math.pow(r2-i, 2)))
if i < r1: # r1 이상은 중첩되는 점이 없기 때문에
# 반지름이 r1 부채꼴 내에서 y좌표가 i인 지점에서 나올수 있는 점의 수를 차감
temp = math.sqrt(pow_r1 - math.pow(r1-i, 2))
answer -= math.floor(temp)
if temp.is_integer(): # 정수인 경우 원위에 점이 있기 때문에 점의 수 추가
answer += 1
answer += (r2 - r1 + 1) # 축 위에 있는 점의 수 추가
return answer * 4 # 부채꼴(1/4 형태의 원)만 확인했기 때문에 *4 수행
※ 잘못된 점, 개선점 등이 있다면 언제든 댓글로 알려주시면 감사하겠습니다.
반응형
'Alogorithm > programmers' 카테고리의 다른 글
[programmers] Lv2 2xn 타일링 - Python (0) | 2023.04.18 |
---|---|
[programmers] Lv2 124 나라의 숫자 - Python (0) | 2023.04.18 |
[programmers] Lv2 요격 시스템 - Python & Java (0) | 2023.04.14 |
[programmers] Lv3 단속카메라 - Python (0) | 2023.04.14 |
[programmers] Lv2 연속된 부분 수열의 합 - Python (0) | 2023.04.07 |