복대가리의 개발

[C#] 백준 (알고리즘)/브론즈 문제

[백준 - C#] 3053번 택시 기하학

복대가리 2022. 10. 28. 00:11
728x90

문제링크

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

 

3053번: 택시 기하학

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

www.acmicpc.net

 

문제

19세기 독일 수학자 헤르만 민코프스키는 비유클리드 기하학 중 택시 기하학을 고안했다.

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

D(T1,T2) = |x1-x2| + |y1-y2|

두 점 사이의 거리를 제외한 나머지 정의는 유클리드 기하학에서의 정의와 같다.

따라서 택시 기하학에서 원의 정의는 유클리드 기하학에서 원의 정의와 같다.

원: 평면 상의 어떤 점에서 거리가 일정한 점들의 집합

반지름 R이 주어졌을 때, 유클리드 기하학에서 원의 넓이와,
택시 기하학에서 원의 넓이를 구하는 프로그램을 작성하시오.

조건

시간제한 : 1초
메모리 제한 : 128 MB

입력

첫째 줄에 반지름 R이 주어진다. R은 10,000보다 작거나 같은 자연수이다.

출력

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

 

문제정리

1. 첫째 줄에는 유클리드 기하학에서의 원의 넓이를 구하여야합니다.
2. 두번째 줄에는 택시 기하학에서의 원의 넓이를 출력하여야 합니다.

이번 문제의 경우 유클리드 기하학과 택시 기하학에서의 원의 넓이를 구하여야합니다.

위키피디아에 정리가 깔끔히 되어있어서 가지고 와봤습니다.

 

https://en.wikipedia.org/wiki/Taxicab_geometry

 

Taxicab geometry - Wikipedia

From Wikipedia, the free encyclopedia Jump to navigation Jump to search Type of geometry using Manhattan or L1 metric A taxicab geometry or a Manhattan geometry is a geometry in which the usual distance function or metric of Euclidean geometry is replaced

en.wikipedia.org

결론은 유클리드 기하학에서는 위의 이미지 중 초록색이라고 할 수 있는데, 즉 우리가 알던 일반적인 원이라고 생각하면 될 것 같습니다. 원의 넓이를 구하는 공식은 원의넓이 = 반지름 * 반지름 * PI 입니다.

 

택시 기하학은 저도 처음 봤지만,, 위의 그림에서 보면 빨간색 파란색 노란색 은 어떤 길을 가더라도 똑 같이 12번 이동하게 됩니다. 즉 문제 에서 나타 냈었던 D(T1,T2) = |x1-x2| + |y1-y2| 라고 볼 수 있습니다.

 

그래서 택시 기하학에서의 원은 무엇이냐 라고 하면 마름모라고 볼 수 있습니다.

출처 : 위키피디아

위의 그림과 같이 택시 기하학에서 거리가 같은 지점들을 이어서 그리면 마름모가 나오는 것을 확인해 볼 수 있습니다.

그리하여 원의 넓이는 = 대각선의 가로길이 * 대각선의 세로 길이 / 2 = 2R*2R/2 = 2*R*R 로 볼 수 있습니다.

 

C# 코드

1
2
3
4
5
6
7
8
9
10
11
12
13
static void Main(string[] args)
{
    StreamWriter writer = new StreamWriter(Console.OpenStandardOutput());
    StreamReader reader = new StreamReader(Console.OpenStandardInput());
 
    int R = int.Parse(reader.ReadLine());
 
    writer.WriteLine($"{R * R * Math.PI:0.000000}");
    writer.WriteLine($"{R * R * 2.0d:0.000000}");
 
    writer.Close();
    reader.Close();
}
cs
읽어주셔서 감사합니다 오늘도 즐거운 하루 되세요.

 

728x90