https://www.acmicpc.net/problem/3053
3053번: 택시 기하학
첫째 줄에는 유클리드 기하학에서 반지름이 R인 원의 넓이를, 둘째 줄에는 택시 기하학에서 반지름이 R인 원의 넓이를 출력한다. 정답과의 오차는 0.0001까지 허용한다.
www.acmicpc.net
문제
19세기 독일 수학자 헤르만 민코프스키는 비유클리드 기하학 중 택시 기하학을 고안했다.
택시 기하학에서 두 점 T1(x1,y1), T2(x2,y2) 사이의 거리는 다음과 같이 구할 수 있다.
D(T1,T2) = |x1-x2| + |y1-y2|
두 점 사이의 거리를 제외한 나머지 정의는 유클리드 기하학에서의 정의와 같다.
따라서 택시 기하학에서 원의 정의는 유클리드 기하학에서 원의 정의와 같다.
원: 평면 상의 어떤 점에서 거리가 일정한 점들의 집합
반지름 R이 주어졌을 때, 유클리드 기하학에서 원의 넓이와, 택시 기하학에서 원의 넓이를 구하는 프로그램을 작성하시오.
입력
첫째 줄에 반지름 R이 주어진다. R은 10,000보다 작거나 같은 자연수이다.
출력
첫째 줄에는 유클리드 기하학에서 반지름이 R인 원의 넓이를, 둘째 줄에는 택시 기하학에서 반지름이 R인 원의 넓이를 출력한다. 정답과의 오차는 0.0001까지 허용한다.
예제 입력 1
1
예제 출력 1
3.141593
2.000000
예제 입력 2
21
예제 출력 2
1385.442360
882.000000
예제 입력 3
42
예제 출력 3
5541.769441
3528.000000
sol1)
%0.6f는 float형으로 6번째자리까지 반올림한 값을 출력하도록 한다.
# 택시 기하학 3053번
import math
R = int(input())
print("%0.6f"%(R*R*math.pi))
print("%0.6f"%(2*(R**2)))
sol2)
어차피 6번째자리까지 출력하면 되고, 문제 조건에 따라 정답과의 오차는 0.0001까지 허용된다. 이를 역이용하면, pi를 math 라이브러리에서 사용하지 않고 임의의 유한소수 값으로 바꿀 수 있다.
starjh2001님의 코드를 참고했고, 소숫점 몇번째 자리까지 나타내면 되는지 계속 시도하는 과정에서 계속 '실패했습니다.'가 연발됐다. 덕분에 오차가 0.0001까지 허용되는 게 아님을 알았고, 소숫점 6번째자리 이상으로 출력되더라도 통과됨을 알았다. 따라서 3.1415926으로 파이를 설정하면 실패한다.(원래는 7번째자리에서 반올림 한 후, 6번째 자리에서 반올림되도록 round(~,6)할 계획이었다. 하지만 잘 되지 않자, 소숫점 아래로 계속 내려가보았고, 3.141592653589 에서 멈춘다.
R = int(input())**2
print(R*3.141592653589)
print(R*2)
결국 코드 길이를 극한으로 54B까지 줄였고 1등 찍었다.
'Baekjoon Algorithm > python' 카테고리의 다른 글
[Python]BAEKJOON 1010번 다리놓기 (0) | 2022.12.26 |
---|---|
[Python]BAEKJOON 11399번 ATM (0) | 2022.12.26 |
[Python] BAEKJOON 1085번 직사각형에서 탈출 (0) | 2022.12.22 |
[Python]BAEKJOON 2750번 수 정렬하기 (0) | 2022.12.22 |
[Python] BAEKJOON 2231번 분해합 (0) | 2022.12.22 |
댓글