[C++]백준1002번 터렛
오늘은 백준1002번 터렛 문제를 풀어보도록 하자.
정답률이 20%일 정도로 매우 저조한데 예외처리의 문제와 자료형의 비교에서 많은 사람들이 틀렸던 것 같다.
케이스는 크게 3개로 나누고 각각의 케이스 안에서 또 3가지의 케이스로 나누면 되는 문제였다.
문제는 다음과 같다.
[접근법]
주석 참고
[코드]
#include <iostream>
#include <cmath>
#include <algorithm>
using namespace std;
int N, x_1, y_1, r_1, x_2, y_2, r_2;
int main() {
cin >> N;
while (N--) {
cin >> x_1 >> y_1 >> r_1 >> x_2 >> y_2 >> r_2;
if (x_1 == x_2 && y_1 == y_2 && r_1 == r_2) {//겹칠 때
cout << -1 << '\n';
continue;
}
if (r_1 + r_2 > sqrt(pow(abs(x_1 - x_2), 2) + pow(abs(y_1 - y_2), 2))) { // 반지름 합 > 중심사이거리
if (sqrt(pow(abs(x_1 - x_2), 2) + pow(abs(y_1 - y_2), 2)) + min(r_1, r_2) == max(r_1, r_2)) {//내접
cout << 1 << '\n';
}
else if (sqrt(pow(abs(x_1 - x_2), 2) + pow(abs(y_1 - y_2), 2)) + min(r_1, r_2) < max(r_1, r_2)) {//내부에서 안 만남
cout << 0 << '\n';
}
else {
cout << 2 << '\n';
}
}
else if (r_1 + r_2 < sqrt(pow(abs(x_1 - x_2), 2) + pow(abs(y_1 - y_2), 2))) {// 반지름 합 < 중심사이거리
cout << 0 << '\n';
}
else { // 반지름 합 == 중심사이거리
cout << 1 << '\n';
}
}
}