[백준] 3053 - 택시 기하학

2020. 9. 22. 11:30알고리즘/Baekjoon

728x90

www.acmicpc.net/problem/3053

 

3053번: 택시 기하학

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

www.acmicpc.net

알고리즘 보다 수학적 지식만 알면되는 문제입니다. 유클리드 기하학이란,,, 아래 위키를 참고하세요! (백준 사이트 힌트란에 있습니다)

유클리드 기하학: 한국어 위키 영문 위키 Wolfram Mathworld

비유클리드 기하학: 한국어 위키 영문 위키 Wolfram Mathworld

택시 기하학: 한국어 위키 영문 위키 Wolfram Mathworld

택시 기하학은 비(非)유클리드 기하학인데요. 원의 넓이를 구할 때 정점에서 반지름 거리에 있는 점들의 집합이 '원'을 형성하기 때문에 거리 상에 있는 점을 구하는 방법이 다른 유클리드 기하학과 택시 기하학은 원 넓이에도 차이가 있습니다.

유클리드 기하학은 일반적인 π(3.14159...)를 사용한 원 넓이이며 택시 기하학은 마름모의 넓이가 됩니다. 뜬금없이 왠 마름모냐구요? 택시 기하학은 정점(x,y)로부터 반지름 거리에 있는 점(x',y')을 구할 때 |x-x'| + |y-y'| = r 공식을 만족해야 합니다. 예시가 보기 쉽도록 반지름 r이 1일 때 손수 택시 기하학 공식을 활용한 거리 상 점들을 찍어보았습니다.

저런 마름모꼴 정사각형이 됩니다. 각 변의 길이는 직각삼각형 피타고라스 정리(x2 + y2 = z2) 제곱 특수기호 찾아 넣기가 귀찮습니다ㅠㅠ...를 이용해 구해주면 됩니다. 길이 제곱이 곧 정사각형 넓이기 때문에 제곱근 할 필요없이 (R * R) * 2 해주면 되겠죠!

Java에서 Math API PI 메서드는 친절하게 π를 상수로 제공해줍니다. 그리고 원 넓이는 소수 여섯째자리까지 나타내야 합니다. Java에선 printf를 활용하면 편한데요, "%.6f"(6이 나타낼 소수점 자릿수, f가 데이터 타입: float) 요렇게 써주시면 소수점을 나타낼 수 있답니다.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
package baekJoon.week9;
 
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
 
public class TaxiGeo_3053 {
 
    private static int R;
    private static double ucld;
    private static double taxi;
    public static void main(String[] args) throws IOException {
        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
 
        R = Integer.parseInt(br.readLine());
 
        ucld = (R*R) * Math.PI;
        taxi = (double) (R*R) * 2;
 
        System.out.printf("%.6f\n%.6f",ucld, taxi);
 
    }
}
 
cs

'알고리즘 > Baekjoon' 카테고리의 다른 글

[백준] 1904 - 01 타일  (0) 2020.10.14
[백준] 1436 - 영화감독 숌  (0) 2020.10.06
[백준] 2775 - 부녀회장이 될테야  (0) 2020.09.18
[백준] 2292 - 벌집  (0) 2020.09.14
[백준] 2941 - 크로아티아 알파벳  (0) 2020.09.10