공부/백준(C++) - 2022~

백준 3053번: 택시 기하학[C++]

상연 2022. 1. 20. 20:22

목차

    https://www.acmicpc.net/problem/3053

     

    3053번: 택시 기하학

    첫째 줄에는 유클리드 기하학에서 반지름이 R인 원의 넓이를, 둘째 줄에는 택시 기하학에서 반지름이 R인 원의 넓이를 출력한다. 정답과의 오차는 0.0001까지 허용한다.

    www.acmicpc.net

    코드

    #include <iostream>
    #include <cmath>
    using namespace std;
    
    int main() {
    	double r, u_circle, t_circle;
    	
    	cin >> r;
    	
    	u_circle = M_PI * r * r;
    	t_circle = r * r * 2;
    	
    	printf("%.6f\n", u_circle);
    	printf("%.6f", t_circle);
    }

     

    설명

    생소해 보이는 택시 기하학에서 원의 정의를 이해하면 되는 문제이다.

    https://ko.wikipedia.org/wiki/%EB%B9%84%EC%9C%A0%ED%81%B4%EB%A6%AC%EB%93%9C_%EA%B8%B0%ED%95%98%ED%95%99#%ED%83%9D%EC%8B%9C_%EA%B8%B0%ED%95%98%ED%95%99

     

    비유클리드 기하학 - 위키백과, 우리 모두의 백과사전

    비유클리드 기하학(non-Euclidean geometry)은 직선 밖의 한 점에서 직선에 평행한 직선을 두 개 이상 그을 수 있는 공간을 대상으로 하는 기하학이다. 유클리드 기하학의 제5공리 "직선 밖의 한 점을

    ko.wikipedia.org

    문제에 첨부된 위키백과를 참고하면 

    이 부분이 기술되어있다.

    이 점을 참고하면 주어진 r 기준으로 택시 기하학에서의 원은

    대각선의 길이가 2*r 인 정사각형의 넓이를 구하면 되는것으로 알 수 있다.

    그 경우 정사각형의 넓이는 2*r*r 이므로 이를 출력해주면 된다.

     

    단, 유의할점은 유클리드 기하학에서의 원의 넓이를 구할때는 M_PI를 사용해야하는데

    변수를 double로 하지않고 float형으로 할 시 형 변환에서 값의 손실이 발생하여 오답이 발생하므로

    반드시 double로 변수를 선언하고 풀어야 하는 문제이다.