Algorithm/Baekjoon
[백준] 3053번 : 택시 기하학 - Java
unknownomad
2022. 4. 4. 22:32
https://www.acmicpc.net/problem/3053
3053번: 택시 기하학
첫째 줄에는 유클리드 기하학에서 반지름이 R인 원의 넓이를, 둘째 줄에는 택시 기하학에서 반지름이 R인 원의 넓이를 출력한다. 정답과의 오차는 0.0001까지 허용한다.
www.acmicpc.net
택시 기하학 = 맨해튼 거리, Manhatten distance
빨간색 길이 = 파란색 길이 = 노란색 길이
➡ 2차원 평면에서 가로를 x, 세로를 y라 할 때,
택시 기하학에서의 거리 = 두 점의 x 좌표 차 + 두 점의 y 좌표 차
유클리드 기하학 | 택시 기하학 |
* 그림 상의 초록색 선 * 우리가 평소에 아는 '거리' 개념 D(T₁, T₂)² = (𝑥₁ - 𝑥₂)² + (y₁ - y₂)² 원의 넓이 = 𝜋𝑟² = 3 × 3 × 𝜋 = 9𝜋 유클리드 기하학에서의 원의 넓이 = 𝜋𝑟² |
* '거리'의 개념을 새로 정의함 D(T₁, T₂) = |𝑥₁ - 𝑥₂| + |y₁ - y₂| D = |𝑥| + |y| 원의 넓이 = 2𝑟² = 2 × 3 × 3 = 18 택시 기하학에서의 원의 넓이 = 2𝑟² |
풀이
1. Scanner
import java.util.Scanner;
public class Main {
public static void main(String[] args)
Scanner in = new Scanner(System.in);
//오차 범위 : 0.0001 ➡ double 타입 사용
//𝜋 = Math.PI
//public static final double PI = 3.14159265358979323846; (자바 13 기준)
double R = in.nextDouble(); //반지름 R
in.close();
System.out.println(R * R * Math.PI); //유클리드 원의 넓이
System.out.println(2 * R * R); //택시기하학 원의 넓이
}
}
2. BufferedReader
import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.io.IOException;
public class Main {
public static void main(String[] args) throws IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
double R = Double.parseDouble(br.readLine()); //반지름 R
System.out.println(R * R * Math.PI); //유클리드 원의 넓이
System.out.println(2 * R * R); //택시기하학 원의 넓이
}
}
String ➡ 기본 자료형(Primitive Type)으로 타입 변환하는 방법
- Wrapper.parseWrapper 사용
- 자바의 기본 자료형 데이터 타입 + 이에 대응하는 래퍼 클래스
Primitive Type | Wrapper Class |
byte | Byte |
short | Short |
int | Int |
long | Long |
float | Float |
double | Double |
boolean | Boolean |
char | Character |
String str = "123456";
byte a = Byte.parseByte(str); //String ➡ byte
short b = Short.parseShort(str); //String ➡ short
int c = Integer.parseInt(str); //String ➡ int
long d = Long.parseLong(str); //String ➡ long
float e Float.parseFloat(str); //String ➡ float
double f = Double.parseDouble(str); //String ➡ double
String str2 = "true";
boolean g = Boolean.parseBoolean(str2); //String ➡ boolean
//char은 없음
//String ➡ char 하려면 charAt() 활용
성능
- BufferedReader > Scanner