๋ณธ๋ฌธ ๋ฐ”๋กœ๊ฐ€๊ธฐ
โœจ Algorithm

[๋ฐฑ์ค€/C++] 3053๋ฒˆ : ํƒ์‹œ ๊ธฐํ•˜ํ•™ (PI ์‚ฌ์šฉ)

by nitronium102 2021. 8. 13.

๋ฌธ์ œ

19์„ธ๊ธฐ ๋…์ผ ์ˆ˜ํ•™์ž ํ—ค๋ฅด๋งŒ ๋ฏผ์ฝ”ํ”„์Šคํ‚ค๋Š” ๋น„์œ ํด๋ฆฌ๋“œ ๊ธฐํ•˜ํ•™ ์ค‘ ํƒ์‹œ ๊ธฐํ•˜ํ•™์„ ๊ณ ์•ˆํ–ˆ๋‹ค.

ํƒ์‹œ ๊ธฐํ•˜ํ•™์—์„œ ๋‘ ์  T1(x1,y1), T2(x2,y2) ์‚ฌ์ด์˜ ๊ฑฐ๋ฆฌ๋Š” ๋‹ค์Œ๊ณผ ๊ฐ™์ด ๊ตฌํ•  ์ˆ˜ ์žˆ๋‹ค.

D(T1,T2) = |x1-x2| + |y1-y2|

๋‘ ์  ์‚ฌ์ด์˜ ๊ฑฐ๋ฆฌ๋ฅผ ์ œ์™ธํ•œ ๋‚˜๋จธ์ง€ ์ •์˜๋Š” ์œ ํด๋ฆฌ๋“œ ๊ธฐํ•˜ํ•™์—์„œ์˜ ์ •์˜์™€ ๊ฐ™๋‹ค.

๋”ฐ๋ผ์„œ ํƒ์‹œ ๊ธฐํ•˜ํ•™์—์„œ ์›์˜ ์ •์˜๋Š” ์œ ํด๋ฆฌ๋“œ ๊ธฐํ•˜ํ•™์—์„œ ์›์˜ ์ •์˜์™€ ๊ฐ™๋‹ค.

์›: ํ‰๋ฉด ์ƒ์˜ ์–ด๋–ค ์ ์—์„œ ๊ฑฐ๋ฆฌ๊ฐ€ ์ผ์ •ํ•œ ์ ๋“ค์˜ ์ง‘ํ•ฉ

๋ฐ˜์ง€๋ฆ„ R์ด ์ฃผ์–ด์กŒ์„ ๋•Œ, ์œ ํด๋ฆฌ๋“œ ๊ธฐํ•˜ํ•™์—์„œ ์›์˜ ๋„“์ด์™€, ํƒ์‹œ ๊ธฐํ•˜ํ•™์—์„œ ์›์˜ ๋„“์ด๋ฅผ ๊ตฌํ•˜๋Š” ํ”„๋กœ๊ทธ๋žจ์„ ์ž‘์„ฑํ•˜์‹œ์˜ค.

์ž…๋ ฅ

์ฒซ์งธ ์ค„์— ๋ฐ˜์ง€๋ฆ„ R์ด ์ฃผ์–ด์ง„๋‹ค. R์€ 10,000๋ณด๋‹ค ์ž‘๊ฑฐ๋‚˜ ๊ฐ™์€ ์ž์—ฐ์ˆ˜์ด๋‹ค.

์ถœ๋ ฅ

์ฒซ์งธ ์ค„์—๋Š” ์œ ํด๋ฆฌ๋“œ ๊ธฐํ•˜ํ•™์—์„œ ๋ฐ˜์ง€๋ฆ„์ด R์ธ ์›์˜ ๋„“์ด๋ฅผ, ๋‘˜์งธ ์ค„์—๋Š” ํƒ์‹œ ๊ธฐํ•˜ํ•™์—์„œ ๋ฐ˜์ง€๋ฆ„์ด R์ธ ์›์˜ ๋„“์ด๋ฅผ ์ถœ๋ ฅํ•œ๋‹ค. ์ •๋‹ต๊ณผ์˜ ์˜ค์ฐจ๋Š” 0.0001๊นŒ์ง€ ํ—ˆ์šฉํ•œ๋‹ค.

ํ’€์ด

01. ํƒ์‹œ ๊ธฐํ•˜ํ•™์—์„œ์˜ ์›

๋จผ์ € ํƒ์‹œ ๊ธฐํ•˜ํ•™์— ๋Œ€ํ•ด ์•Œ์•„์•ผ ํ•œ๋‹ค. ํƒ์‹œ ๊ธฐํ•˜ํ•™์—์„œ์˜ ์ขŒํ‘œํ‰๋ฉด์€ ๋„๋กœ๋กœ ์ƒ๊ฐํ•  ์ˆ˜ ์žˆ๋Š”๋ฐ, ๋Œ€๊ฐ์„ ์œผ๋กœ ๋ฐ”๋กœ ๊ฐ€๋Š” ๊ฒƒ์€ ๋ถˆ๊ฐ€๋Šฅํ•˜๋ฉฐ ๊ฐ€๋กœ์™€ ์„ธ๋กœ๋กœ๋งŒ ๊ฐˆ ์ˆ˜ ์žˆ๋‹ค.  

์ดˆ๋ก์ƒ‰ ์„ (๋Œ€๊ฐ์„ )์œผ๋กœ๋Š” ๊ฐˆ ์ˆ˜ ์—†๋‹ค. 

๊ทธ๋ ‡๋‹ค๋ฉด ํƒ์‹œ ๊ธฐํ•˜ํ•™์—์„œ ์›์ด๋ž€ ๋ฌด์—‡์ธ๊ฐ€? ์œ ํด๋ฆฌ๋“œ ๊ธฐํ•˜ํ•™์—์„œ ์›์€ "ํ•œ ์ ์—์„œ ๊ฐ™์€ ๊ฑฐ๋ฆฌ์— ์žˆ๋Š” ์ ์˜ ์ง‘ํ•ฉ"์œผ๋กœ ํ‘œํ˜„๋œ๋‹ค. ๊ทธ๋Ÿฌ๋‚˜ ํƒ์‹œ ๊ธฐํ•˜ํ•™์—์„œ๋Š” ๊ฑฐ๋ฆฌ์˜ ์ •์˜๊ฐ€ ๋‹ค๋ฅด๊ธฐ ๋•Œ๋ฌธ์— ์›์˜ ๋ชจ์–‘๋„ ๋‹ค๋ฅด๊ฒŒ ๋‚˜ํƒ€๋‚œ๋‹ค.

ํƒ์‹œ ๊ธฐํ•˜ํ•™์—์„œ์˜ ์›

์กฐ๊ธˆ ์–ด์ƒ‰ํ•˜๊ฒŒ ๋ณด์ผ ์ˆ˜ ์žˆ์œผ๋‚˜ ๋นจ๊ฐ„์ƒ‰ ์ ๋“ค๊ณผ ํŒŒ๋ž€์ƒ‰ ์  ๊ฐ„์˜ ๊ฑฐ๋ฆฌ๊ฐ€ ๋ชจ๋‘ 2๋กœ ๋™์ผํ•œ ๊ฒƒ์„ ํ™•์ธํ•  ์ˆ˜ ์žˆ๋‹ค.

( ์‹ : โˆฃxaโˆฃ+โˆฃybโˆฃ=d )

 ํƒ์‹œ ๊ธฐํ•˜ํ•™์—์„œ์˜ ๋ฐ˜์ง€๋ฆ„์ด R์ธ ์›์˜ ๋„“์ด๋Š” ๋‘ ๋Œ€๊ฐ์„ ์˜ ๊ธธ์ด๊ฐ€ 2R์ธ ๋งˆ๋ฆ„๋ชจ์˜ ๋„“์ด์™€ ๊ฐ™๋‹ค. -> 2R^2

 

02. C++์—์„œ PI๊ฐ’ ์‚ฌ์šฉํ•˜๊ธฐ

PI ์ƒ์ˆ˜๊ฐ’์„ ์ฃผ๋Š” ๋ฐฉ๋ฒ•๋„ ์žˆ์ง€๋งŒ ๋งค๋ฒˆ ์ธํ„ฐ๋„ท์— PI๊ฐ’์„ ๊ฒ€์ƒ‰ํ•˜๊ธฐ ๊ท€์ฐฎ๊ธฐ ๋•Œ๋ฌธ์— ํ—ค๋”์— ์ •์˜๋˜์–ด ์žˆ๋Š” PI ๊ฐ’์„ ์‚ฌ์šฉํ•˜์˜€๋‹ค. 

<cmath> ํ—ค๋”์— M_PI๊ฐ’์ด ์ •์˜๋˜์–ด ์žˆ์œผ๋ฉฐ, ์ •ํ™•ํ•œ PI๊ฐ’ ์‚ฌ์šฉ์„ ์œ„ํ•ด์„œ๋Š” ์œ„์— #define _USE_MATH_DEFINES๋ฅผ ์„ ์–ธํ•ด์•ผ ํ•œ๋‹ค.

#define _USE_MATH_DEFINES
#include <cmath> // M_PI

 cout << r*r*M_PI << "\n";;

 

03. ์†Œ์ˆ˜์  ์ž๋ฆฌ ๊ณ ์ •

fixed์™€ precision(์›ํ•˜๋Š” ์†Œ์ˆ˜์  ์ž๋ฆฟ์ˆ˜)๋ฅผ ํ†ตํ•ด ์ถœ๋ ฅํ•˜๋Š” ์†Œ์ˆ˜์  ์ž๋ฆฌ๋ฅผ ๊ณ ์ •ํ•  ์ˆ˜ ์žˆ๋‹ค. 

cout << fixed;
cout.precision(6);

#define _USE_MATH_DEFINES
#include <iostream>
#include <cmath> // PI
using namespace std;

int main() {
  double r;
  cin >> r;
  cout << fixed;
  cout.precision(6);
  cout << r*r*M_PI << "\n";;
  cout << r*r*2 << "\n";
}

๋Œ“๊ธ€