문제
https://www.acmicpc.net/problem/1002
소스코드
#include <iostream>
#include <cmath>
using namespace std;
int main(void) {
int T; cin >> T;
for (int t = 0; t < T; t++) {
int x1, y1, r1, x2, y2, r2;
cin >> x1 >> y1 >> r1 >> x2 >> y2 >> r2;
int answer;
//원의 중심간의 거리
float d = sqrt((x2 - x1)*(x2 - x1) + (y2 - y1)*(y2 - y1));
//case 1 : 내접
if (d == abs(r1 - r2) && d != 0) answer = 1;
//case 2 : 외접
else if (d == r1 + r2) answer = 1;
//case 3 : 한 원이 다른 원을 포함
else if (d < abs(r1 - r2)) answer = 0;
//case 4 : 두 점에서 만나는 경우
else if (d < r1 + r2 && d > abs(r1-r2)) answer = 2;
//case 5 : 만나지 않는 경우
else if (d > r1 + r2) answer = 0;
//case 6 : 두 원이 일치하는 경우
else if (d == 0 && r1 == r2) answer = -1;
cout << answer << endl;
}
}
코드설명
중학교 수학 시간에 배웠던 두 원의 위치 관계에 대한 문제였다.
d에 점 (x1, y1)과 점 (x2, y2) 간의 거리를 저장하고 d와 반지름 간의 관계로 케이스 분류해서 푸는 문제!
'개인 공부 > 코딩테스트' 카테고리의 다른 글
[C++] 백준 10989번 수 정렬하기 3 :: seoftware (0) | 2020.03.06 |
---|---|
[C++] 백준 2751번 수 정렬하기 2 :: seoftware (0) | 2020.03.06 |
[C++] 백준 2675번 문자열 반복 :: seoftware (0) | 2020.03.06 |
[C++] 백준 5543번 상근날드 :: seoftware (0) | 2020.03.06 |
[C++] 백준 2869번 달팽이는 올라가고 싶다 :: seoftware (0) | 2020.03.06 |
댓글