https://www.acmicpc.net/problem/32754
해당 문제는 간단한 거리 계산 문제입니다.
다행히도 2차원 도형문제이기 때문에 크게 생각할 것은 없었습니다.
먼저 직사각형이기 때문에 무게중심은 각 꼭짓점을 더한 것의 4분의 1에 위치할 것입니다.
그리고 원점에서 가장 가까운 거리를 가지도록 회전하기 위해서는 무게중심에서 가장 먼 위치인 대각 꼭짓점이 원점의 기울기에 맞게 회전해야할 것입니다.

무게중심 간 기울기와, 가장 가까운 거리의 점까지의 기울기가 같기 때문에 결론적으로 원점에서 가장 가까운 거리는 무게중심까지의 거리와 무게중심에서 꼭짓점 까지의 거리의 차이입니다.
int main() {
ios::sync_with_stdio(false);
cin.tie(nullptr);
int N, R;
cin >> N >> R;
int result = 0;
for (int i = 0; i < N; ++i)
{
int x1, y1, x2, y2, x3, y3, x4, y4;
cin >> x1 >> y1 >> x2 >> y2 >> x3 >> y3 >> x4 >> y4;
double cx = (x1 + x2 + x3 + x4) / 4.0;
double cy = (y1 + y2 + y3 + y4) / 4.0;
double r1 = hypotl(cx, cy);
double r2 = hypotl(cx - x1, cy - y1);
if (R >= r1 - r2)
++result;
}
cout << result;
return 0;
}
결론적으로 위와 같은 코드가 나옵니다.
여기서 주의할 점이 있다면, double로의 연산 cx, cy를 할 때 int끼리 연산하면 안된다는 점입니다.
만약에 나눗셈이 4.0(f)이 아니라 4라면, int와 int사이의 나눗셈이 되어 자동으로 소수점이 버려지기 때문에 원하는 답과 다른 답이 나올 수 있다는 것입니다.
hypot, hypotf, hypotl, _hypot, _hypotf, _hypotl
hypot, hypotf, hypotl, _hypot, _hypotf 및 _hypotl;에 대한 API 참조 는 hypotenuse를 계산합니다.
learn.microsoft.com
삼각형의 빗변거리를 구하는 것에는 hypot계열 함수를 사용했습니다.
직접 구해도 충분히 답이 될 것으로 보입니다.
'Algorithm > PS' 카테고리의 다른 글
| [1일 1알고] S4 27466 그래서 대회 이름 뭐로 하죠 (0) | 2026.03.25 |
|---|---|
| [1일 1알고] G4 16169 수행 시간 (0) | 2026.03.24 |
| [1일 1알고] 23352 방탈출 (0) | 2026.03.22 |
| [PS] 소수점 제한하기(C++) (0) | 2026.03.06 |
| [PS] getline함수 간단하게 보기 (0) | 2025.11.01 |