Java/백준알고리즘

[Java] 백준알고리즘 #3053 택시 기하학

Sehyeok20 2021. 3. 11. 15:33
반응형

백준알고리즘 #3053 택시 기하학 문제

택시 기하학에서 두 점 사이의 거리가 위 조건과 같을 때, 주어진 반지름을 가진 원의 넓이를 구하는 문제이다.

언뜻 보면 복잡해 보이는 문제이지만 간단하다.

 

원의 정의가 유클리드 기하학과 같기 때문에 먼저 택시 기하학에서 두 점 사이의 거리가 같은 점들을 구해본다.

예를 들어 반지름이 1일 경우 유클리드 기하학에서 원은 다음과 같이 표현할 수 있다.

유클리드 기하학

하지만 택시 기하학에서는 두 점사이의 거리가 |x1 - y1| + |x2 - y2| 이므로

이 거리가 1이 되는 순서쌍에는 (1, 0) (0.5, 0.5)  (0, 1) (-0.5, 0.5) ... 등이 있다.

이를 그림으로 나타내보면 다음과 같다.

택시 기하학

즉 택시 기하학에서 반지름이 r인 원 (한 점으로부터 거리가 같은 점들의 집합) 의 넓이는

대각선이 2*r 인 마름모의 넓이와 같다고 볼 수 있겠다.

마름모의 넓이는 대각선 * 대각선 / 2로 쉽게 구할 수 있다.

 

따라서 위 조건에서 유클리드 기하학의 원의 넓이는 PI * r * r 이 되고

택시 기하학에서 원의 넓이는 (r * 2) * (r * 2) /2 가 된다. 즉 (r * 2) * r 와 같다.

 

 

이를 바탕으로 코드를 작성해보면 다음과 같다

import java.util.Scanner;

public class Back3053 {

	public static void main(String[] args) {
		Scanner sc = new Scanner(System.in);
		int r = sc.nextInt();
		double ur;
		double tr;
		ur = Math.PI * r * r;
		tr = (r * 2) * r;
		System.out.printf("%f\n",ur);
		System.out.printf("%f",tr);

		sc.close();
	}

}

문제의 출력처럼 유효숫자 7자리로 나타내기 위해 printf 를 사용하여 %f 형으로 잘라내어 표기하였다.

 

반응형