본문 바로가기
프로그래밍/백준 문제 풀이(자바)

백준 3053번 자바 문제 답/해설(택시 기하학 문제)

by 리드민 2021. 12. 31.
반응형

[1] 백준 카테고리

단계별로 풀어보기

기본 수학2

10단계 3053번 문제

택시기하학

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

 

3053번: 택시 기하학

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

www.acmicpc.net


[2] 문제

19세기 독일 수학자 헤르만 민코프스키는 비유클리드 기하학 중 택시 기하학을 고안했다.
택시 기하학에서 두 점 T1(x1,y1), T2(x2,y2) 사이의 거리는 다음과 같이 구할 수 있다.
D(T1,T2) = |x1-x2| + |y1-y2|
두 점 사이의 거리를 제외한 나머지 정의는 유클리드 기하학에서의 정의와 같다.
따라서 택시 기하학에서 원의 정의는 유클리드 기하학에서 원의 정의와 같다.
원: 평면 상의 어떤 점에서 거리가 일정한 점들의 집합
반지름 R이 주어졌을 때, 유클리드 기하학에서 원의 넓이와, 택시 기하학에서 원의 넓이를 구하는 프로그램을 작성하시오.

 

1. 입력

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


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

3. 예제 입력 1
1


4.예제 출력 1

3.141593

2


[3] 정답
1. 정답 해설 미포함

import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.io.IOException;
import java.util.StringTokenizer;


public class Main {
	public static void main(String[] args) throws NumberFormatException, IOException{
		
		BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
		StringTokenizer st = new StringTokenizer(br.readLine(), " ");
		
		double a = Integer.parseInt(st.nextToken());
		
		double u = 0;
		double taxi = 0;
		
		u= a*a*Math.PI;
		taxi= a*a*2;
		
		System.out.println(String.format("%.6f", u));
		System.out.println(String.format("%.6f", taxi));
	}
}


2. 정답 해설 포함

import java.io.BufferedReader;
/* BufferedReader 사용을 위해서 java.io.BufferedReader 클래스를 import 한다.
Enter를 경계로 인식하고 받은 데이터는 String으로 고정된다.*/
import java.io.InputStreamReader;
/* byte 단위 데이터를 문자 단위 데이터로 처리할 수 있도록 변환해주기 위해서
InputStreamReader를 사용한다.
InputStreamReader 사용을 위해서 java.io.InputStreamReader 클래스를 import 한다.*/
import java.io.IOException;
/* 예외 처리를 위해서 IOException를 사용한다.
IOException 사용을 위해서 java.io.IOException 클래스를 import 한다.*/
import java.util.StringTokenizer;
/* 공백 단위로 호출하기 위해서 StringTokenizer를 사용한다
StringTokenizer를 사용하기 위해서
StringTokenizer java.util.String 클래스를 import 한다.*/

public class Main {
// 접근제어자 public으로 Main 클래스를 선언한다.
	public static void main(String[] args) throws NumberFormatException, IOException{
	// 접근제어자 public으로 메모리에 상주하고 리턴값이 없이 main 함수를 선언한다.
		BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
		//BufferedReader 객체 br를 선언한다.
		StringTokenizer st = new StringTokenizer(br.readLine(), " ");
		// StringTokenizer 객체 st를 선언한다 이제 공백으로 값을 입력받을 수 있다.
		
		double a = Integer.parseInt(st.nextToken());
		/* double형 변수 a를 선언하고 값을 공백 단위로 구분해서 입력받는다.
		Inter.parseInt()로 String 변수를 double형으로 변환시킨다.*/
		
		double u = 0;
		// double형 변수 u를 선언하고 0으로 초기화한다.
		double taxi = 0;
		// double형 변수 taxi를 선언하고 0으로 초기화한다.
		
		u= a*a*Math.PI;
		/* a*a*Math.PI한 값을 변수 u에 저장한다.
		Math.Pi 값은 Math 클래스에 3.14159265로 이미 정의되어 있다. */
		taxi= a*a*2;
		// a*a*2한 값을 변수 taxi에 저장한다.
		
		System.out.println(String.format("%.6f", u));
		// 소수점 6자리 까지 변수 u를 출력한다.
		System.out.println(String.format("%.6f", taxi));
		// 소주점 6자리 까지 변수 taxi를 출력한다.
	}
}

 

원의 넓이를 출력해줘야 한다.

유클리드 기하학에서의 원의 넓이는 r*r*PI(r은 원의 반지름), 택시 기하학에서의 원의 넓이는 r*r*2이다. 이를 코드를 나타내면

		u= a*a*Math.PI;
		taxi= a*a*2;

다음과 같다. 파이 값은 Math 클래스에 정의되어 있는 값을 사용하였다.

반응형