Notice
Recent Posts
Recent Comments
Link
«   2026/06   »
1 2 3 4 5 6
7 8 9 10 11 12 13
14 15 16 17 18 19 20
21 22 23 24 25 26 27
28 29 30
Archives
Today
Total
관리 메뉴

dh-winternagi 님의 블로그

(7869) 두 원 본문

백준 (C++)/Solve

(7869) 두 원

dh-winternagi 2026. 4. 22. 18:33

https://www.acmicpc.net/problem/7869

단계별로 풀어보기

39단계(기하 2) 9번째

 

 

 

두 원 사이의 거리와 각각의 반지름을 비교하여 겹치는 모양을 파악한 뒤 각각의 모양에 맞는 공식으로 넓이를 구하면 된다.

안 겹치면 0, 완전히 겹치면 작은 원의 넓이와 똑같지만 일부분만 겹칠 때가 문제다. 겹치는 부분의 중심각을 구하고 호와 현을 구하는 공식을 쓰면 되는데, 알고리즘이 아닌 수학 공식이므로 설명은 생략한다.

 

 

 

#include <iostream>
#include <cmath>
using namespace std;

int main() {
  cout<<fixed;
  cout.precision(3);
  
  double x1, y1, r1, x2, y2, r2, ans;
  cin >> x1 >> y1 >> r1 >> x2 >> y2 >> r2;

  double d= sqrt((x2-x1)*(x2-x1)+(y2-y1)*(y2-y1));

  if(d>=r1+r2){
    ans= 0;
  }else if(r1-r2>=d){
    ans= M_PI*r2*r2;
  }else if(r2-r1>=d){
    ans= M_PI*r1*r1;
  }else{
    double a1= acos((r1*r1+d*d-r2*r2)/(2*r1*d));
    double a2= acos((r2*r2+d*d-r1*r1)/(2*r2*d));

    ans= (r1*r1*a1)+(r2*r2*a2)-(r1*r1*sin(2*a1)/2)-(r2*r2*sin(2*a2)/2);
  }

  cout << ans;
  
  return 0;
}

'백준 (C++) > Solve' 카테고리의 다른 글

(11723) 집합  (0) 2026.04.22
(1069) 집으로  (0) 2026.04.22
(1688) 지민이의 테러  (0) 2026.04.22
(2162) 선분 그룹  (0) 2026.04.22
(20149) 선분 교차 3  (0) 2026.04.22