| 문제
19세기 독일 수학자 헤르만 민코프스키는 비유클리드 기하학 중 택시 기하학을 고안했다.
택시 기하학에서 두 점 T1(x1,y1), T2(x2,y2) 사이의 거리는 다음과 같이 구할 수 있다.
D(T1,T2) = |x1-x2| + |y1-y2|
두 점 사이의 거리를 제외한 나머지 정의는 유클리드 기하학에서의 정의와 같다.
따라서 택시 기하학에서 원의 정의는 유클리드 기하학에서 원의 정의와 같다.
원: 평면 상의 어떤 점에서 거리가 일정한 점들의 집합
반지름 R이 주어졌을 때, 유클리드 기하학에서 원의 넓이와, 택시 기하학에서 원의 넓이를 구하는 프로그램을 작성하시오.
| 입력
첫째 줄에 반지름 R이 주어진다. R은 10,000보다 작거나 같은 자연수이다.
| 출력
첫째 줄에는 유클리드 기하학에서 반지름이 R인 원의 넓이를, 둘째 줄에는 택시 기하학에서 반지름이 R인 원의 넓이를 출력한다. 정답과의 오차는 0.0001까지 허용한다.
| 예제 입력 1
1
| 예제 출력 1
3.141593
2.000000
| 예제 입력 2
21
| 예제 출력 2
1385.442360
8882.000000
| 예제 입력 3
42
| 예제 출력 3
5541.769441
3528.000000
| 문제의 키 포인트
1. 유클리드 기하학과 비유클리드 기하학의 택시 기하학에 대해 알아야 한다.
[유클리드 기하학에서의 두 점 사이의 거리]
두 점 T1(x1, y1)와 T2(x2, y2) 사이의 거리
> d(T1, T2) = √(x2-x1)2+(y2-y1)2
[비유클리드 기하학에서의 두 점 사이의 거리]
두 점 T1(x1, y1)와 T2(x2, y2) 사이의 거리
> d(T1, T2) = |x2-x1| + |y2-y1|
2. 택시 기하학의 성질
- 삼각형의 합동공리가 성립하지 않는다.
- 세 변의 길이가 같은 삼각형이라는 정삼각형의 정의를 택시평면에 적용하면 세 각의 크기가 각각 45도, 45도, 90도가 나온다. 즉 택시기하학에서는 정삼각형의 모양이 다르다
- 네 변의 길이가 같은 사각형인 마름모의 대표적 성질은 두 대각선이 서로 직교한다는 것인데, 택시기하학에서는 이를 만족하지 않는다.
- 한 정점에서 일정한 거리에 있는 점의 집합이라는 원의 정의를 택시평면에 적용하면 |x|+|y|=r을 만족시키는 점 (x,y)의 집합이 된다. 이 집합은 (유클리드 거리로 정의된) 원이 아닌 두 대각선의 길이가 같은 다이아몬드 모양의 정사각형을 만든다.
3. 유클리드 기하학의 원의 넓이 공식은 일반적으로 우리가 수학시간에 배운 공식과 동일하다.
> 반지름 R인 원의 넓이: PI x R2
4. 비유클리드 기하학의 원의 넓이 공식
> 반지름 R인 원의 넓이: 2 x R2
| 해결방안(Solution)
1. 반지름 R을 입력받고 각각의 원의 넓이를 구한다.
| 소스코드(SourceCode)
// BOJ_3053_Taxi_geometry, 택시 기하학
#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>
#include <math.h>
#define PI 3.14159265359
int main(void)
{
int R;
double Euclid_area, Non_Euclid_area;
scanf("%d", &R);
Euclid_area = PI * pow((double)R, 2);
Non_Euclid_area = 2 * pow((double)R, 2);
printf("%lf\n%lf", Euclid_area, Non_Euclid_area);
return 0;
}
문제 자체는 쉬웠지만, 어처구니 없는 부분에서 틀렸습니다. 고배를 많이 마셨던 문제였습니다.
상단에 PI값을 3.141592까지만 적었더니, 계속 틀려서 소수점아래 11자리까지 써주니 그제서야 정답처리가 되었습니다.
다른 분들은 저와 같은 실수가 없기를 바랍니다.
그럼 오늘도 즐거운 코딩!
| 문제출처
https://www.acmicpc.net/problem/3053
3053번: 택시 기하학
첫째 줄에는 유클리드 기하학에서 반지름이 R인 원의 넓이를, 둘째 줄에는 택시 기하학에서 반지름이 R인 원의 넓이를 출력한다. 정답과의 오차는 0.0001까지 허용한다.
www.acmicpc.net
'코딩 | 알고리즘 & 문제풀이 > 백준_Backjoon' 카테고리의 다른 글
[C언어] Backjoon_Code 10872, 팩토리얼 (0) | 2021.08.03 |
---|---|
[C언어] Backjoon_Code 1002, 터렛 (0) | 2021.08.02 |
[C언어] Backjoon_Code 4153, 직각삼각형 (0) | 2021.07.31 |
[C언어] Backjoon_Code 3009, 네 번째 점 (0) | 2021.07.30 |
[C언어] Backjoon_Code 1085, 직사각형에서 탈출 (0) | 2021.07.29 |