λ³Έλ¬Έ λ°”λ‘œκ°€κΈ°

Study/μ½”ν…Œ

λ°±μ€€ 브둠즈3 3053번: νƒμ‹œ κΈ°ν•˜ν•™

2023.02.24
C++

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

힌트

μœ ν΄λ¦¬λ“œ κΈ°ν•˜ν•™: ν•œκ΅­μ–΄ μœ„ν‚€ μ˜λ¬Έ μœ„ν‚€ Wolfram Mathworld

λΉ„μœ ν΄λ¦¬λ“œ κΈ°ν•˜ν•™: ν•œκ΅­μ–΄ μœ„ν‚€ μ˜λ¬Έ μœ„ν‚€ Wolfram Mathworld

νƒμ‹œ κΈ°ν•˜ν•™: ν•œκ΅­μ–΄ μœ„ν‚€ μ˜λ¬Έ μœ„ν‚€ Wolfram Mathworld

μ½”λ“œ

#define _USE_MATH_DEFINES	// M_PI μ‚¬μš©μ„ μœ„ν•΄
#include <iostream>
#include <math.h>	// M_PI μ‚¬μš©
using namespace std;

int main() {
	double R;
	cin >> R;

	cout << fixed;		// μ†Œμˆ˜μ  6μžλ¦¬κΉŒμ§€
	cout.precision(6);

	cout << pow(R, 2) * M_PI << endl;	// μœ ν΄λ¦¬λ“œ κΈ°ν•˜ν•™: r*r*π
	cout << pow(R, 2) * 2 << endl;	// νƒμ‹œ κΈ°ν•˜ν•™: r*r*2

	return 0;
}

풀이

1. μœ ν΄λ¦¬λ“œ κΈ°ν•˜ν•™κ³Ό νƒμ‹œ κΈ°ν•˜ν•™

μž…λ ₯κ³Ό 좜λ ₯만 보고 μœ ν΄λ¦¬λ“œ κΈ°ν•˜ν•™μ€ λ°˜μ§€λ¦„*λ°˜μ§€λ¦„*π, νƒμ‹œ κΈ°ν•˜ν•™μ€ λ°˜μ§€λ¦„*λ°˜μ§€λ¦„*2λΌλŠ” 것을 μ•Œ 수 μžˆμ—ˆλ‹€.

 

λΉ¨κ°•, νŒŒλž‘, λ…Έλž‘: νƒμ‹œ 거리(λ§¨ν•΄νŠΌ 거리)둜 μ„ μ˜ κΈΈμ΄λŠ” λͺ¨λ‘ 12이닀.
초둝: μœ ν΄λ¦¬λ“œ 거리둜 μ„ μ˜ κΈΈμ΄λŠ” 6√2 (λŒ€λž΅ 8.49)이닀.

κΈ°ν•˜ν•™μ—μ„œμ˜ 원: ν•œμ μ—μ„œ 같은 거리에 μžˆλŠ” 점의 집합

μœ ν΄λ¦¬λ“œ κΈ°ν•˜ν•™μ˜ 원: μš°λ¦¬κ°€ ν”νžˆ μ•„λŠ” 원 / 방정식: (xa)²+(yb)²=r²

νƒμ‹œ κΈ°ν•˜ν•™μ˜ 원: ν•œ μ μ—μ„œ 거리가 2인 μ λ“€μ˜ 집합(κ·Έλ¦Ό1)의 격자λ₯Ό μ€„μ—¬λ‚˜κ°€λ©΄ μ›μ˜ λͺ¨μŠ΅μ€ κ·Έλ¦Ό2처럼 λœλ‹€. 즉 λ§ˆλ¦„λͺ¨κΌ΄ ν˜•νƒœμ˜ μ •μ‚¬κ°ν˜•μ΄ λœλ‹€. / 방정식: ∣xa∣+∣yb∣=d

 

μœ„λ₯Ό 톡해 νƒμ‹œ κΈ°ν•˜ν•™μ˜ μ›μ˜ λ„“μ΄λŠ” λ°˜μ§€λ¦„*λ°˜μ§€λ¦„*2λΌλŠ” 것을 μ•Œ 수 μžˆλ‹€.

β€» μ΄λ•Œ μ œκ³±μ€ pow(λ°˜μ§€λ¦„, 2(제곱))으둜 ꡬ할 수 μžˆλ‹€.

 

2. πλ₯Ό μ–΄λ–»κ²Œ ν•  것인가?

방법1) M_PIλ₯Ό μ‚¬μš©ν•œλ‹€.

#define _USE_MATH_DEFINES
#include <math.h>

double R = 숫자;
dobule circle = M_PI * R * R;

#define _USE_MATH_DEFINES λ₯Ό μ¨μ€˜μ•Ό M_PIλ₯Ό μ‚¬μš©ν–ˆμ„ λ•Œ μ—λŸ¬κ°€ λ‚˜μ§€ μ•ŠλŠ”λ‹€.

 

 

방법1) #define pi 3.141592.... λ₯Ό ν•œλ‹€.

μ΄λ•Œ 3.141592...λ₯Ό 길게 μ •μ˜ ν•΄μ£Όμ–΄μ•Όν•œλ‹€.

이유: [λ°±μ€€] 3053 νƒμ‹œ κΈ°ν•˜ν•™ (C++) :: Devlog (tistory.com) 

 

3. μ†Œμˆ˜μ  6μžλ¦¬κΉŒμ§€ λ‚˜νƒ€λ‚΄κΈ°

cout << fixed;
cout.precision(자리수);

μ°Έκ³ 

https://namu.wiki/w/%ED%83%9D%EC%8B%9C%20%EA%B8%B0%ED%95%98%ED%95%99

[C] Cμ–Έμ–΄ M_PI μ‚¬μš©ν•˜κΈ° :: Development Assemble (tistory.com)

[C++] C/C++ μ—μ„œ Pi (μ›μ£Όμœ¨) μ‚¬μš©ν•˜λŠ” 법 (tistory.com)

C++ μ†Œμˆ˜μ  개수 μ‘°μ ˆν•˜κΈ° (atomic0x90.github.io)