본문 바로가기
백준알고리즘

백준알고리즘:p3053 택시 기하학

by socialcomputer 2021. 4. 2.
반응형

분류: 기본수학2

 

문제

 

▶유클리드 기하학에서 원의 넓이를 구하는 방법은 이란 우리가 흔히 알고있는 원 넓이 구하는 방법(r^2 x π)과 같다.

이 문제에서 알아야 하는 것은 택시 기하학인데, 택시기하학의 원 넓이 구하는 방법은 아래와 같다. (2 x r^2)

https://blog.naver.com/alwaysneoi/100172516753

택시 기하학은 유클리드 기하학과 다르게 가로질러 가지 못한다. 

설명

코드

//백준알고리즘 제출시 클래스 이름은 Main으로 바꿔야 됨 
package math_2;

import java.util.Scanner;

public class p3053 {
//택시기하학
	public static void main(String[] args) {
		Scanner sc = new Scanner(System.in);
		int x = sc.nextInt();
		System.out.println(String.format("%.6f", Math.pow(x, 2)*Math.PI));//유클리드 기하학 r^2*PI
		System.out.println(String.format("%.6f", Math.pow(x, 2)*2));//택시 기하학 2*(r^2)
sc.close();
	}

}

▶택시기하학 처음 들어봤지만 찾아보니 어려운 개념이 아니라서 풀 수 있었다. 

하지만 이 문제는 소숫점 표현이 정답 여부를 결정한다.

 

처음에 Math.round()를 써서 출력했지만 틀렸다.

이후 String,format("%.6f", number)로 출력해 정답이 됐다.

이유는 둘의 차이점에 있다. 

 

Math.round 혹은 ceil, floor은 소숫아래 수가 0이면 표현하지 않는다. 2.0

그러나 String.format은 0이더라도 표현한다. 2.000000

Math는 숫자를 반환해서 소숫점 아래 0을 표현하지 않고

String.format은 형식에 맞춘 문자열로 0을 표현한다고 생각하면 될것 같다.

 

 

▶참고로 Math.round로 소숫점 표현한 코드

System.out.println(Math.round(Math.pow(x, 2)*Math.PI*1000000)/1000000.0);// 3.141593
System.out.println(Math.round(Math.pow(x, 2)*2*1000000)/1000000.0);// 2.0

 


채점결과

 

링크 www.acmicpc.net/problem/3053

 

3053번: 택시 기하학

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

www.acmicpc.net

 

반응형

댓글