BOJ 3053 - 택시 기하학 문제풀이
문제를 읽고 이해하기
19세기 독일 수학자 헤르만 민코프스키는 비유클리드 기하학 중 택시 기하학을 고안했다. 택시 기하학에서 두 점 T1(x1,y1), T2(x2,y2) 사이의 거리는 다음과 같이 구할 수 있다.
D(T1,T2) = |x1-x2| + |y1-y2|
두 점 사이의 거리를 제외한 나머지 정의는 유클리드 기하학에서의 정의와 같다. 따라서 택시 기하학에서 원의 정의는 유클리드 기하학에서 원의 정의와 같다.
원: 평면 상의 어떤 점에서 거리가 일정한 점들의 집합
반지름 R이 주어졌을 때, 유클리드 기하학에서 원의 넓이와, 택시 기하학에서 원의 넓이를 구하는 프로그램을 작성하시오.
입력
첫째 줄에 반지름 R이 주어진다. R은 10,000보다 작거나 같은 자연수이다.
출력
첫째 줄에는 유클리드 기하학에서 반지름이 R인 원의 넓이를, 둘째 줄에는 택시 기하학에서 반지름이 R인 원의 넓이를 출력한다. 정답과의 오차는 0.0001까지 허용한다.
재정의와 추상화
유클리드 기하학에서 한 점과 다른 한 점 사이의 거리는 아래와 같이 정의된다.
따라서 원은 아래와 같이 그려진다.
반면에 택시 기하학에서 한 점과 다른 한 점 사이의 거리는 아래와 같이 정의된다.
따라서 원은 아래와 같이 그려진다.
따라서 유클리드 기하학에서의 원의 넓이는 원래 우리가 알고 있던대로
PI(3.1415...) * r^2
이다.
반면에 택시 기하학에서의 원의 넓이는 아래와 같다.
(2 * r) * (2 * r) / 2
위 공식은 (한 대각선) * (다른 대각선) / 2로, 마름모 넓이 공식이다. 더 나아가, 택시 기하학에서의 원은 항상 정사각형 꼴을 띄므로 정사각형 넓이 공식을 통해 아래와 같이 구할 수도 있다.
((루트 2) * r)^2
코드 작성
#define _USE_MATH_DEFINES
#include <iostream>
#include <cmath>
using namespace std;
int main() {
int r;
cin >> r;
cout << fixed;
cout.precision(6);
cout << M_PI * pow(r, 2) << '\n';
cout << pow(2 * r, 2) / 2;
return 0;
}
- 파이 값은 cmath 헤더에 포함된 M_PI 매크로를 사용하면 된다.
- 단, M_PI 매크로를 사용하려면, 최상단에 #define _USE_MATH_DEFINES를 사용해야 한다.
그림 출처
'알고리즘 > 문제풀이' 카테고리의 다른 글
BOJ 10250 - ACM 호텔 문제풀이 (0) | 2020.04.08 |
---|---|
BOJ 2292 - 벌집 문제풀이 (0) | 2020.04.08 |
BOJ 2580 - 스도쿠 문제풀이 (0) | 2020.04.08 |
BOJ 1654 - 랜선 자르기 문제풀이 (0) | 2020.04.07 |
BOJ 1436 - 영화감독 숌 (0) | 2020.04.07 |
댓글
이 글 공유하기
다른 글
-
BOJ 10250 - ACM 호텔 문제풀이
BOJ 10250 - ACM 호텔 문제풀이
2020.04.08 -
BOJ 2292 - 벌집 문제풀이
BOJ 2292 - 벌집 문제풀이
2020.04.08 -
BOJ 2580 - 스도쿠 문제풀이
BOJ 2580 - 스도쿠 문제풀이
2020.04.08 -
BOJ 1654 - 랜선 자르기 문제풀이
BOJ 1654 - 랜선 자르기 문제풀이
2020.04.07