https://www.acmicpc.net/problem/3053
< 택시 기하학 >
이 문제는 택시 기하학에서의 원이 무엇인지를 알아야 풀 수 있는 문제이다.
원의 정의는 유클리드 기하학, 택시 기하학에서 같다고 되어 있다. " 평면 상의 어떤 점에서 거리가 일정한 점들의 집합 "
유클리드 기하학에서는 두 점의 거리를 (x1 - x2)^2 + (y1 - y2)^2 의 값에 루트를 씌우는 형태라면,
택시 기하학에서는 두 점의 거리를 ㅣx1 - x2ㅣ + ㅣy1 -y2ㅣ로 한다고 되어있다.
즉, 택시 기하학에서의 원은 마름모꼴로 나타나게 된다.
택시 기하학에서 왜 원이 마름모꼴인지 이해가 가지 않는다면
https://m.blog.naver.com/alwaysneoi/100172516753 블로그를 참고해보면 될 것 같다.
따라서 유클리드 기하학에서의 원의 넓이는 r이 반지름이라고 할 때 r * r * PI 이고 택시 기하학에서는 2 * r * r 이 될 것이다.
#include <iostream> #include <cmath> using namespace std; int main() { ios_base::sync_with_stdio(0); cin.tie(0); double r; cin >> r; // 소수점 여섯째자리까지 출력 cout << fixed; cout.precision(6); // 유클리드 cout << r * r * M_PI << '\n'; // 택시 cout << r * r * 2 << '\n'; return 0; }
주의) PI값을 define으로 직접 지정해주어 계산을 하는 경우, r의 최대값이 10000이므로, 10000 * 10000 * PI를 생각해서
PI를 최소 소수점 4 + 4 + 6자리 해서 16번째 자리까지는 적어주어야 한다.
#define PI 3.14159265358979 과 같이 해주고 곱해주어도 된다.
cout.precision(n) 은 6째 자리까지 출력해 주는 것이지, 소수점부터 6번 째 자리까지 출력해주는 것이 아니다.
따라서 cout << fixed; 를 통해 소수 6번째 자리까지 출력해주도록 해주어야 한다.
'알고리즘 > 백준 문제풀기' 카테고리의 다른 글
BOJ 백준 1037 약수 <수학> (0) | 2019.02.02 |
---|---|
BOJ 백준 2869 달팽이는 올라가고 싶다 <수학> (0) | 2019.01.31 |
BOJ 백준 9251 LCS <dp, LCS> (0) | 2019.01.11 |
BOJ 백준 2162 선분 그룹 <선분 교차> (0) | 2019.01.09 |
BOJ 백준 2857 FBI <문자열 처리> (0) | 2019.01.06 |