🖥️ CS/Baekjoon Algorithms

#3053번 택시 기하학 (c++)

한국의 메타몽 2020. 2. 25. 00:02
#define _USE_MATH_DEFINES // PI값을 사용하기 위해 쓰임. PI는 M_PI로 호출된다.
#include <cmath> // 위의 정의를 사용하는데 필요하다
#include <iostream>
using namespace std;

int main(){
    ios_base::sync_with_stdio(false);
    cin.tie(NULL);
    
    int r = 0;
    cin >> r;
    
    double ucle = M_PI * r * r;
    double taxi = 2 * r * r;
    
    cout.precision(6);
    cout << fixed;
    
    cout << ucle << "\n" << taxi;
    
    return 0;
}

쉽지만 재밋었던 문제.

간단히 요약하면 

 

반지름이 주어질 경우

(1) 기존의 공식으로 원의 넓이 (2) 택시 기하학의 원리를 이용한 원의 넓이 

를 구하면 된다. 

 

파이를 처음 써보고 + 소수점 6자리까지 정확도를 표현하는데 구글링을 이용했다. 

파이를 이용하는데에는 두 가지 기본 방식이 필요했다. 

(1) #define_USE_MATH_DEFINES

(2) #include <cmath> 

해당 전처리기들을 사용하면 M_PI를 사용할 수 있게 되고, 이는 우리가 친숙하게 알고있던 PI(π)를 뜻한다. 

 

정확도를 표현하는 방법은 

cout.precision(x) -> 소수점 x번째 자리까지 정확도를 표현

cout << fixed -> 이럴경우 맨 마지막 여섯 번 째가 '0'으로 끝나도 표기를 해준다. 

이 두 가지를 이용하면 원하는 정확도를 표현할 수 있다. 

 

마지막으로 택시 공식은 원문에서 주어진 

'택시 기하학에서 두 점 T1(x1,y1), T2(x2,y2) 사이의 거리는 다음과 같이 구할 수 있다.

D(T1,T2) = |x1-x2| + |y1-y2|' 부분을 잘 해석하면 아래와 같은 정삼각형, 내지는 다이아몬드 모양의 그림이 나온다. 

이를 이해하면 공식을 만드는 것은 쉽다.