반응형
1002번: 터렛
각 테스트 케이스마다 류재명이 있을 수 있는 위치의 수를 출력한다. 만약 류재명이 있을 수 있는 위치의 개수가 무한대일 경우에는 -1을 출력한다.
www.acmicpc.net
풀이 )
두 원 사이의 거리를 이용하는 문제이다.
두 원의 위치 관계는 다음과 같이 나눌 수 있다. (d^2 = (x2-x1)^2 + (y2-y1)^2)
- 일치 --- 1 (d == 0 && r1 == r2)
- 서로 다른 두 점에서 만나는 경우 --- 2 (|r2-r1| < d < r2+r1)
- 한 점에서 만나는 경우
- 내접 --- 3 (d == |r2-r1|)
- 외접 --- 4 (d == r2+r1)
- 만나지 않는 경우
- 내부에 있는 경우 --- 5 (d < |r2-r1|)
- 외부에 있는 경우 --- 6 (d > r2+r1)
#include <iostream>
using namespace std;
int main(void){
int t;
cin >> t;
while(t--){
int x1, y1, r1, x2, y2, r2;
cin >> x1 >> y1 >> r1 >> x2 >> y2 >> r2;
int dd = (x2-x1)*(x2-x1)+(y2-y1)*(y2-y1);
if(dd == 0){
if(r1 == r2) // case 1
cout << "-1" << endl;
else // case 5
cout << '0' << endl;
continue;
}
if(dd > (r1+r2)*(r1+r2) || dd < (r1-r2)*(r1-r2)) // case 6, 5
cout << '0' << endl;
else if(dd == (r1+r2)*(r1+r2) || dd == (r1-r2)*(r1-r2)) // case 4, 3
cout << '1' << endl;
else // case 2
cout << '2' << endl;
}
}
반응형
'문제풀이 > 백준' 카테고리의 다른 글
[C++] 백준 - 17300 : 패턴 (0) | 2020.11.29 |
---|---|
[C++] 백준 - 1004 : 어린 왕자 (0) | 2020.11.29 |
[C++] 백준 - 14891 : 톱니바퀴 (0) | 2020.11.27 |
[C++] 백준 - 14888 : 연산자 끼워넣기 (0) | 2020.11.25 |
[C++] 백준 - 2583 : 영역 구하기 (0) | 2020.11.25 |