본문 바로가기
알고리즘

[프로그래머스] Lv2 두 원 사이의 정수 쌍

by 순원이 2024. 3. 12.



첫 번째 시도(실패)

 

 

- 규칙 찾기

반지름 1 - 5(4+1)
반지름 2 - 13(4+9)
반지름 3 - 29(4+25) 
반지름 4 - 53(4+49)

- 규칙 보여서 코드 짰음
- 예외가 있었음(규칙이 아니였던 거임) 테두리가 꼭 4점만 정수여야 하는 건 아님


두 번째 시도 (성공 and 타임아웃)


x,y 각각 +1 하면서 x^2 + y^2 <= r^2 인지 탐색
통과는 하지만 타임아웃 O(n2)

 


세 번째 시도(최적화)

 

  • 테투리 계산을 위해서 큰원은 ceil(올림)고 작은원은 floor(내림)한다.
class Solution {
    public long solution(int r1, int r2) {
        long answer = 0;
 
        for (int i=1; i<=r2; i++) {
            long minJ = (int) Math.ceil(Math.sqrt(1.0*r1*r1 - 1.0*i*i));
            long maxJ = (int) Math.floor(Math.sqrt(1.0*r2*r2 - 1.0*i*i));
 
            answer += (maxJ - minJ + 1);
 
        }
 
        return answer * 4;
    }
}