코딩하기 좋은날
백준 1002번 터렛 본문
반응형
https://www.acmicpc.net/problem/1002
문제와 채점은 위 사이트에서 확인 하실 수 있습니다
이 문제는 두 좌표와 거리를 입력받아서 류재명의 위치를 찾는 문제입니다. 저는 두원이 존재한다고 생각하고 가능한 모든 경우를 따져서 문제를 해결하였습니다. 가능한 경우는 총 7가지로
첫번째로 두원이 동일한 원인경우 가능한 가지수는 무한대 입니다.
두번째로 두원의 좌표는 동일하고 반지름은 다를경우 가능한 가지수는 0입니다.
세번째로 한원이 하나의 원안에 들어가 있는데 중심은 다른경우 입니다. 이경우는 가능한 가지수가 0입니다.
네번째는 하나의 원이 하나의 원안에 들어가있고 중심이 다르면서 하나의 점에서 만나는 경우입니다. 이경우 가능한 가지수는 1입니다.
다섯번째 경우는 두 원이 두점에서 만나는 경우입니다. 이경우 가능한 가지수는 2입니다.
여섯번째 경우는 두원이 외부에서 한점에서 만나는 경우입니다. 이경우 가능한 가지수는 1입니다.
일곱번째 경우는 두원이 외부에서 만나지 않는 경우입니다. 이경우 가능한 가지수는 0입니다.
다음은 코드입니다.
#include <iostream>
using namespace std;
int main(void) {
ios_base::sync_with_stdio(false); cin.tie(NULL);
int x1,y1,r1;
int x2,y2,r2;
int T;
cin >> T;
while(T--) {
cin >> x1 >> y1 >> r1;
cin >> x2 >> y2 >> r2;
if(x1==x2 && y1==y2 && r1==r2) {
cout<<-1<<'\n';
}
else if(x1==x2 && y1==y2) {
cout<<0<<'\n';
}
else if((x1-x2) * (x1-x2)
+(y1-y2) * (y1-y2) < (r1-r2) * (r1-r2))
cout<<0<<'\n';
else if((x1-x2) * (x1-x2)
+(y1-y2) * (y1-y2) == (r1-r2) * (r1-r2))
cout<<1<<'\n';
else if((x1-x2) * (x1-x2)
+(y1-y2) * (y1-y2) < (r1+r2) * (r1+r2))
cout<<2<<'\n';
else if((x1-x2) * (x1-x2)
+(y1-y2) * (y1-y2) == (r1+r2) * (r1+r2))
cout<<1<<'\n';
else if((x1-x2) * (x1-x2)
+(y1-y2) * (y1-y2) > (r1+r2) * (r1+r2))
cout<<0<<'\n';
}
return 0;
}
반응형
'백준(Baekjoon) 문제' 카테고리의 다른 글
백준 2896 무알콜 칵테일 (0) | 2019.01.29 |
---|---|
백준 2909 캔디 구매 (0) | 2019.01.29 |
백준 10216 Count Circle Groups (0) | 2019.01.29 |
백준 3933 라그랑주의 네 제곱수 정리 (0) | 2019.01.28 |
백준 14928 큰 수(BIG) (0) | 2019.01.26 |