Baekjoon/단계별로 풀어보기

[BOJ / 백준] 1002번 터렛 C++ 문제 풀이

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