728x90
단계별로 풀어보기 - 수학 2단계 - [10단계] 1002번
문제
문제 링크 : www.acmicpc.net/problem/1002
1002번: 터렛
각 테스트 케이스마다 류재명이 있을 수 있는 위치의 수를 출력한다. 만약 류재명이 있을 수 있는 위치의 개수가 무한대일 경우에는 -1을 출력한다.
www.acmicpc.net
입력 복사 :
3 0 0 13 40 0 37 0 0 3 0 7 4 1 1 1 1 1 5
CODE
#include <iostream>
using namespace std;
int main() {
int T;
int x1, y1, r1, x2, y2, r2;
int d, cond1, cond2;
cin >> T;
for (int test = 0; test < T; test++) {
cin >> x1 >> y1 >> r1 >> x2 >> y2 >> r2;
d = (x1 - x2) * (x1 - x2) + (y1 - y2) * (y1 - y2);
cond1 = (r1 - r2) * (r1 - r2);
cond2 = (r1 + r2) * (r1 + r2);
if (d == 0) {
if (cond1 == 0)
cout << "-1" << '\n';
else
cout << "0" << '\n';
}
else if (d == cond1 || d == cond2)
cout << "1" << '\n';
else if (cond1 < d && d < cond2)
cout << "2" << '\n';
else
cout << "0" << '\n';
}
}
풀이
조규현의 좌표 (x1, y1)와 백승환의 좌표 (x2, y2)의 거리를 d라고 하자.
적까지의 거리가 r인 점을 다 표시한 것이 r을 반지름으로 갖는 원일 것이고, 그림으로 나타내면 다음과 같다.
두 원이 만나는 곳이 류재명이 있는 곳이라고 할 수 있다.
두 원 사이의 위치 관계를 생각하여 경우의 수는 다음과 같다.
1. d = r1 + r2 : 두 원은 한 점에서 접한다.
2. r1 - r2 < d < r1 + r2 : 두 원은 두 점에서 접한다.
결과
728x90
'Baekjoon > 단계별로 풀어보기' 카테고리의 다른 글
[BOJ / 백준] 10870번 피보나치 수 5 C++ 문제 풀이 (0) | 2020.11.20 |
---|---|
[BOJ / 백준] 10872번 팩토리얼 C++ 문제 풀이 (0) | 2020.11.20 |
[BOJ / 백준] 3053번 택시 기하학 C++ 문제 풀이 (0) | 2020.11.16 |
[BOJ / 백준] 4153번 직각삼각형 C++ 문제 풀이 (0) | 2020.11.15 |
[BOJ / 백준] 3009번 네 번째 점 C++ 문제 풀이 (0) | 2020.11.11 |