고등학교때 배웠던 원의 방정식을 활용하여 문제를 해결하였다.
두 원의 위치와 반지름이 주어졌을 때, 두 원이 서로 교차하는지, 접하는지, 겹치는지, 아니면 아무 관계도 없는지를 판별하는 프로그램을 구현하면 된다.
- 테스트 케이스의 수를 입력받는다.
- 각 테스트 케이스마다 두 원의 중심 좌표와 반지름을 입력받는다.
- 두 원의 중심 사이의 거리를 계산한다.
- 두 원의 반지름의 차이를 계산한다.
- 두 원의 관계를 판별하고 결과를 출력한다.
결과값(res)은 다음과 같이 설정한다.
- -1: 두 원이 동심원이고 반지름이 같은 경우
- 0: 두 원이 아무 관계도 없는 경우
- 1: 두 원이 서로 교차하거나 한 원이 다른 원을 포함하는 경우
- 2: 두 원이 서로 접하는 경우
즉, 두 원의 중심 사이의 거리를 계산한 뒤, 각 원의 반지름을 기반으로 두 원이 교차하는지, 접하는지, 겹치는지 여부를 판단한다. 여러 조건문을 통해 각 경우에 해당하는 결과를 출력한다.
#include <iostream>
#include <cmath>
using namespace std;
int main() {
ios::sync_with_stdio(false);
cin.tie(NULL);
int t, x1, y1, r1, x2, y2, r2, res;
double dist, sub;
cin >> t;
for (int i = 0; i < t; i++) {
cin >> x1 >> y1 >> r1 >> x2 >> y2 >> r2;
dist = sqrt(pow(x2 - x1, 2) + pow(y2 - y1, 2));
sub = r1 > r2 ? r1 - r2 : r2 - r1;
if (dist == 0 && r1 == r2) {
res = -1;
}
else if (dist < r1 + r2 && (sub < dist)) {
res = 2;
}
else if (dist == r1 + r2 || dist == sub) {
res = 1;
}
else {
res = 0;
}
cout << res << '\n';
}
}
'Koala - 13기 > 코딩테스트 준비 스터디' 카테고리의 다른 글
[백준/Python] 9375번 패션왕 신해빈 (0) | 2024.02.18 |
---|---|
[백준 / Python] #5567 결혼식 (0) | 2024.02.17 |
[백준/C++] 10825번: 국영수 (0) | 2024.02.16 |
[백준/C++] 연결 요소의 개수 (0) | 2024.02.15 |
[PG|Python] 프로그래머스 모두 0으로 만들기 - DFS (0) | 2024.02.15 |