반응형
백준 - 단계별로 풀어보기 [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 자료형으로 문제를 푸는 것이 좋다.
반응형
'Algorithm > Baekjoon BOJ' 카테고리의 다른 글
[백준 / BOJ] - 10872번 팩토리얼 C++ 풀이 (0) | 2020.02.26 |
---|---|
[백준 / BOJ] - 1002번 터렛 C++ 풀이 (1) | 2020.02.25 |
[백준 / BOJ] - 4153번 직각삼각형 C++ 풀이 (0) | 2020.02.18 |
[백준 / BOJ] - 3009번 네 번째 점 C++ 풀이 (0) | 2020.02.18 |
[백준 / BOJ] - 1085번 직사각형에서 탈출 C++ 풀이 (0) | 2020.02.18 |