출처: 프로그래머스 코딩 테스트 연습
https://school.programmers.co.kr/learn/courses/30/lessons/181187
나의 풀이
public long solution(int r1, int r2)
{
long answer = 0;
long rr1 = (long)r1 * (long)r1;
long rr2 = (long)r2 * (long)r2;
// 1사분면에 있는 r2 ~ r1 사이의 점들을 구한다.
// 단, y == 0일때는 제외한다. 따라서 (x == r2) 도 제외.
for(long x = 0; x < r2; ++x)
{
if(x == 0)
{
answer += r2 - r1 + 1;
}
else if(x >= r1)
{
double y = Math.Sqrt(rr2 - x * x);
answer += (int)Math.Floor(y);
}
else // x < r1
{
long xx = x * x;
double y2 = Math.Sqrt(rr2 - xx);
double y1 = Math.Sqrt(rr1 - xx);
int floor = (int)Math.Floor(y2);
int ceil = (int)Math.Ceiling(y1);
answer += floor - ceil + 1;
}
}
return answer * 4; // 4번 회전한다.
}
제곱을 사용하기 때문에 int를 제곱하면 int범위를 넘어버려 자료형에 주의를 해줘야한다는 점을 제외하면 특이한 점은 없다.
'🛡️ 코딩 테스트' 카테고리의 다른 글
C# 택배 배달과 수거하기 - 그리디 / 프로그래머스 [Lv.2] (1) | 2023.04.16 |
---|---|
C# 과제 진행하기 - Stack / 프로그래머스 [Lv.2] (0) | 2023.04.15 |
C# 요격 시스템 - 정렬 / 프로그래머스 [Lv.2] (0) | 2023.04.13 |
C# 혼자서 하는 틱택토 - 경우의 수 / 프로그래머스 [Lv.2] (0) | 2023.04.12 |
C# 광물 캐기 - DFS / 프로그래머스 [Lv.2] (0) | 2023.04.11 |