https://www.acmicpc.net/problem/3053
비유클리드 기하학인 택시기하학에 관한 문제. 이 문제는 풀이가 어려운 것이 아닌 택시기하학에 관한 이해가 먼저인 문제이다.
백준에 올라온 설명만 가지고는 솔직히 무슨말인지 잘 몰랐다. 그래서 따로 조사하고 나서야 이해가 갔다.
유클리드 기하학의 좌표계에서는 두점(a1, b1)과 (a2, b2)사이의 거리는 다음과 같이 구해진다.
하지만 택시기하학에서는 다음과 같이 정의한다.
수평거리 + 수직거리인 셈이다.
이 문제에서는 각 기하학에서의 원의 넓이를 구하라고 한다.
원의 정의는 두 기하학에서 정의가 모두 같지만, 그 모양은 다르다. 우선 원의 정의를 살펴보면,
평면 위의 한 점에 이르는 거리가 일정한 평면 위의 점들의 집합으로 정의되는 도형
거리를 r이라고 두고, 위의 식에서 a2, b2를 각각 x, y로, a1, b1을 0으로 대입해보자. 그러면 각각의 기하학분야에서 정의하는 원의 방정식을 얻을 수 있을 것이다.
전자의 방정식은 원점을 중심으로 반지름이 r인 원의 모양이고, 후자의 경우는, 원점을 중심으로 대각선의 길이가 2r인 마름모일 것이다(또는 한 변의 길이가 sqrt(2) * r인 정사각형이라고도 볼 수 있겠다).
이제 이를 코드에 적용시켜 면적을 구하면 다음과 같을 것이다.
#include <stdio.h>
#define pi 3.14159265358979
int main () {
int r;
scanf("%d", &r);
printf("%.6f \n", r * r * pi); // 유클리드 기하학 - 원의 넓이 : pi*(r^2)
printf("%.6f \n", 2.0 * r * r); // 택시 기하학의 - 원의 넓이 : ((sqrt(2) * r)^2)/2 = 2*(r^2)
return 0;
}
'coding_test > BAEKJOON' 카테고리의 다른 글
백준 15829번 C언어 / C++ 풀이 (4) | 2021.09.13 |
---|---|
백준 1002번 C언어 풀이 (0) | 2021.09.12 |
백준 2581번 C언어 풀이 (0) | 2021.09.10 |
백준 10757번 Python 풀이 (0) | 2021.09.10 |
백준 3009번 C언어 풀이 (0) | 2021.09.10 |