[프로그래머스] 두 원 사이의 정수 쌍
1. 문제
2. 개요
중심이 원점이고 반지름이 각각 r1
, r2
인 두 원이 있다.
두 원 사이(각 원 위에 존재하는 점도 포함)의 x, y좌표가 모두 정수인 점의 개수를 모두 구하는 문제.
3. 풀이 및 코드
3-1. 풀이
원점과 큰 원 내부의 점 사이의 거리를 계산해나가는 이중 for문으로 시도했으나 시간초과로 실패했다.
for문을 하나만 돌리도록 y를 1씩 줄여나가면서 해당 y좌표에서 큰 원의 x좌표와 작은 원의 x좌표의 차이를 이용하여 정점의 개수를 구해보는 시도를 했다.
원은 x, y축에 대하여 대칭이므로 1사분면의 1 <= y <= r2인 구역에서 조건에 맞는 정점의 개수 *4 로 모든 정점의 개수를 구할 수 있다.
! 제곱 및 제곱근 계산 시 MathF를 이용한 계산으로는 통과할 수 없었다.
3-2. C#
using System;
public class Solution {
public long solution(long r1, long r2) {
double answer = 0;
for (long i = r2; i > 0; i--)
{
double large_maxx = Math.Pow(Math.Pow(r2, 2) - Math.Pow(i, 2), 0.5f);
double flarge_maxx = Math.Floor(large_maxx);
if (i >= r1)
answer += flarge_maxx + 1f;
else
{
double small_maxx = Math.Pow(Math.Pow(r1, 2) - Math.Pow(i, 2), 0.5f);
double fsmall_maxx = Math.Floor(small_maxx);
answer += flarge_maxx - fsmall_maxx;
if (small_maxx == fsmall_maxx)
answer += 1;
}
}
return (long)answer * 4;
}
}
Comments