반응형


 

백준 - 단계별로 풀어보기 [3053] 

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

문제

 

 

택시 기하학에서 반지름 R이 주어졌을 때,

일반적인 유클리드 기하학에서의 원의 넓이와 택시 기하학에서의 반지름이 R인 원의 넓이를 출력하는 문제이다.

 

풀이

 

택시 기하학에서의 원은 마름모 형태를 가지고 있다.

 

위와 같은 형태가 택시 기하학에서의 원이다.

한점에서의 거리가 같은 점들의 집합을 모두 이으면 위와 같은 마름모꼴이 된다.

따라서, 정사각형의 한변의 길이는 sqrt(2)*r이 된다.

 

따라서 유클리드 기하학에서의 원의 넓이는 r*r*M_PI이고, 

택시 기하학에서의 원의 넓이는 r*r*2로 정의할 수 있다.

코드

 

#include <cstdio>
#include <cmath> //M_PI 사용 위함
#define _USE_MATH_DEFINES // cmath에 정의된 상수 사용하겠다는 의미
int main() {
    double r,s1,s2; // float형으로 풀 경우 정밀도 문제로 오답발생함.
    scanf("%lf",&r);
    s1 = M_PI * r * r;
    s2 = r*r*2;
    printf("%.6f\n",s1);
    printf("%.6f\n",s2);
    return 0;
}

 

평가

 

택시 기하학에서의 원이 정사각형 모양이라는 것을 금방 간파할 수 있다면 풀이가 가능한 문제이다.

또한, 만약 본 문제를 해결하기 위해서 float 자료형을 사용한다면, 오차 0.0001을 만족하지 못하는 경우가 발생하여 반드시 double 자료형으로 문제를 푸는 것이 좋다.

 

 

반응형
블로그 이미지

Hyunsoo Luke HA

석사를 마치고 현재는 Upstage에서 전문연구요원으로 활동중인 AI 개발자의 삽질 일지입니다! 이해한 내용을 정리하는 용도로 만들었으니, 틀린 내용이 있으면 자유롭게 의견 남겨주세요!

,