두 원 사이의 정수 쌍 문제 바로가기
첫 번째 풀이#
def solution(r1, r2):
answer = 0
for i in range(-r2,r2+1):
for j in range(-r2,r2+1):
if r1**2 <= i**2 + j**2 <= r2**2:
answer += 1
return answer
두 번째 풀이#
def solution(r1, r2):
answer = 0
for i in range(1,r2+1):
for j in range(1,r2+1):
if r1 <= (i**2 + j**2)**0.5 <= r2:
answer += 1
answer = (answer + r2 - r1 + 1)*4
return answer
세 번째 풀이#
from math import ceil, floor
def solution(r1, r2):
answer = 0
for x in range(1,r2+1):
y_top = floor((r2**2-x**2)**0.5)
b_bot = ceil((r1**2-x**2)**0.5) if x<=r1 else 0
answer += y_top - b_bot + 1
return answer * 4
CODE REVIEW#
- 첫 번째 풀이에서는 일부 테스트에서
시간 초과
에러가 5개에서 발생해서 실패했다. 1사분면만 구하고 4배 취해야겠다…
- 두 번째 풀이에서는 사분면만 먼저 계산하고 4배해주었는데 여전히
시간초과
에러가 3개 발생한다. 이중 for문이라 그런듯… 구조를 아예 바꿔야하나?
- 세 번째 풀이에서는 이중 for문을 피하기 위해 x값을 기준으로 최대/최소 y값을 구해서 갯수를 구했다. 결국 해결 완료!
시간 초과
쉽지 않구만 허허…