두 원 사이의 정수 쌍 문제 바로가기
첫 번째 풀이 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값을 구해서 갯수를 구했다. 결국 해결 완료! 시간 초과 쉽지 않구만 허허…