설계
평면상의 좌표가 주어지고, 해당 좌표에서 거리가 주어지는데, 여기서 좌표는 원의 중심, 거리는 반지름으로 생각하면 된다.
즉, 문제에서 류재명이 있을 수 있는 좌표는
1. 조규현을 원의 중심으로 생각했을 때 그릴 수 있는 원
2. 백승환을 원의 중심으로 생각했을 때 그릴 수 있는 원
이 두 원의 교점이다.
따라서 두 원의 위치관계에 따라 교점의 위치를 구해주면, 그게 류재명이 있을 수 있는 좌표의 개수가 된다.
다만, 두 원이 같은 경우(원의 중심이 같고, 반지름이 같은 경우) 류재명이 있을 수 있는 좌표는 무한대이므로 -1을 출력해주면 된다.
코드
#include <iostream>
#include <cmath>
using namespace std;
// y1은 변수명 에러가 나서 y_1으로 바꿈
int x1, y_1, r1, x2, y2, r2;
int main() {
int t;
cin >> t;
for (int i=0; i<t; i++) {
cin >> x1 >> y_1 >> r1 >> x2 >> y2 >> r2;
double d = sqrt((y2-y_1)*(y2-y_1) + (x2-x1)*(x2-x1));
int l_r = max(r1, r2);
int s_r = min(r1, r2);
int sum = l_r + s_r;
int diff = l_r - s_r;
if (y2== y_1 && x2 == x1 && r2 == r1) {
cout << -1;
} else if (sum < d || diff > d) {
cout << 0;
} else if (sum == d || diff == d) {
cout << 1;
} else if (diff < d && d < sum) {
cout << 2;
}
cout << '\n';
}
return 0;
}
문제
https://www.acmicpc.net/problem/1002
'알고리즘 > 문제풀이' 카테고리의 다른 글
[BOJ/1213] 팰린드롬 만들기(JS) (0) | 2022.09.12 |
---|---|
[프로그래머스] 완주하지 못한 선수(C++) (0) | 2022.06.29 |
[BOJ/4889] 안정적인 문자열(C++) (0) | 2022.04.06 |
[백준] (C++) 19683번: 센티와 마법의 뿅망치 (0) | 2021.11.22 |