[백준] 3053. 택시 기하학 (자바스크립트/node.js/javascript/알고리즘/코딩테스트)

2021. 4. 19. 15:08Front-end/알고리즘

728x90
반응형

[백준] 3053. 택시 기하학

 

문제

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

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

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

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

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

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

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

 

입력

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

 

출력

첫째 줄에는 유클리드 기하학에서 반지름이 R인 원의 넓이를, 둘째 줄에는 택시 기하학에서 반지름이 R인 원의 넓이를 출력한다.

정답과의 오차는 0.0001까지 허용한다.

 

예제 입력 1

1

예제 출력 1

3.141593

2.000000

 

 

예제 입력 2

21

예제 출력 2

1385.442360

882.000000

 

예제 입력 3

42

예제 출력 3

5541.769441

3528.000000


내가 작성한 코드 (자바스크립트)

let fs = require('fs');
let input = fs.readFileSync('/dev/stdin').toString();
const radius = Number(input);
const euclidArea = radius * radius * Math.PI;
const texiArea = ((radius * 2) * radius * 0.5 )* 2;

console.log(euclidArea.toFixed(6));
console.log(texiArea.toFixed(6));

 

이 문제는 이해하는 것부터 오래걸렸던 문제이다.

문제를 이해해보면, 이 문제 안에서는 기하학의 종류를 유클리드 기하학 / 택시 기하학 두 종류로 보고 있고

두 기하학 모두 원의 정의는 '평면 상의 어떤 점에서 거리가 일정한 점들의 집합' 을 원이라고 한다.

 

우리가 일반적으로 알고 있는 원의 넓이를 구하는 공식 (반지름 * 반지름 * PI)은 유클리드 기하학인 것이다.

주어진 반지름의 길이는 두 점 사이의 거리라고 할 수 있다.

택시 기하학에서는 두 점 사이의 거리를 D(T1,T2) = |x1-x2| + |y1-y2| 라고 정의하고 있기 때문에 

원의 중심을 (0,0) 이라고 하면, |x1| + |y1| = 반지름이 될 것이다.

 

예를 들어 반지름이 1이라고 한다면, |x1| + |y1| = 1 인 경우를 모두 찾아서 이으면 택시 기하학에서 정의하는 원이 된다.

그 결과 (x1,y1) = (0,1) 또는 (0,-1) 또는 (1,0) 또는 (-1,0) 이렇게 총 4가지의 경우의 수가 나오게 된다.

이를 그래프로 나타내면 다음과 같아진다.

따라서 이 넓이는 삼각형 2개의 넓이의 합이라고 볼 수 있기 때문에 주어진 반지름을 이용하여

(반지름 x 2 ) x 반지름 x 0.5 x 2 로 구할 수 있다.

728x90
반응형