본문 바로가기

알고리즘/백준 문제풀기

BOJ 백준 3053 택시 기하학 < 기하 알고리즘 >

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번째 자리까지 출력해주도록 해주어야 한다.