[백준] 3053번 - 택시 기하학
문제
문제 설명 및 풀이
유클리드 기하학과 달리, 택시 기하학에서 두 점 T1(x1,y1), T2(x2,y2) 사이의 거리는 D(T1,T2) = |x1-x2| + |y1-y2| 이다.
원은 평면 상의 어떤 점에서 거리가 일정한 점들의 집합인데, 택시 기하학이 이해가 안 간다면, 몇 개 그려보면 된다. 몇 개 그려보면, 마름모꼴의 형태를 띄는 것을 쉽게 알 수 있다. (정확히는 정사각형이지만..)
유클리드 기하학에서의 원의 넓이는 익히 알고 있듯 (π * r * r)이며, 택시 기하학에서의 원의 넓이는 (2 * r * r)이다.
코딩을 할 때 주의할 점으로는, 파이의 선언이다. 문제를 살펴보면 반지름의 최대값이 10,000이므로 원 넓이의 최대 값은 10,000 * 10,000 * π이므로, PI의 선언에 있어 소수점 14번 째 자리까지는 적어주어야 탈락이 없다. 그 이유는 10의 8승이니까 8자리, 거기에 최소 소수점 출력 조건인 6자리를 더한 값이 14이기 때문이다.
이것이 까다롭다면 그냥 cmath안에 있는 M_PI(파이와 같음)를 쓰도록 하자. 그러나
- cout « fixed 는 “소수점을 고정시켜 표현하겠다”는 의미이다.
- cout.precision(n) 은 “n자리까지 있다면!!! 표현하겠다”라는 의미이다.
결론적으로, fixed가 필요하다. 그렇지 않다면 예제의 1과 같은 수를 입력하면 결과값이 6번 째 자리까지 출력되지 않기 때문이다. 코드는 아래와 같다.