The Way

백준 1002번: 터렛 본문

PS/백준 온라인 저지

백준 1002번: 터렛

Jeonggyun 2017. 8. 22. 14:30

백준 온라인 저지(BOJ) 1002번 문제

https://www.acmicpc.net/problem/1002



1. 문제 요약

두 사람의 좌표 (x1, y1), (x2, y2)와 해당 점으로부터의 거리 r1, r2가 주어질 때

가능한 좌표의 수 출력



2. 알고리즘

두 원의 위치관계를 이용하는 문제이다

(참고: http://mathbang.net/101)

거리를 비교할 때, 실제 거리를 구하려면 제곱근을 씌워야 하지만

여기서는 단순 크기비교이므로 제곱을 한 값을 비교하는 것이 여러모로 깔끔하다.

sqrt를 사용하면 include를 하나 더 해야되는 것은 그렇다 쳐도 double이 튀어나오는데 이는 항상 오차를 야기하기 때문이다.



3. 코드

#include <iostream>
using namespace std;

int main() {
	int n;
	scanf("%d", &n);

	for (int i = 0; i < n; ++i) {
		int x1, y1, r1, x2, y2, r2;
		scanf("%d %d %d %d %d %d", &x1, &y1, &r1, &x2, &y2, &r2);

		int d = (x2 - x1) * (x2 - x1) + (y2 - y1) * (y2 - y1);
		int sum = (r1 + r2) * (r1 + r2);
		int dif = (r1 - r2) * (r1 - r2);

		if (d == 0) {
			if (dif == 0) printf("-1\n");
			else printf("0\n");
		}
		else if (d == sum || d == dif) printf("1\n");
		else if (dif < d && d < sum) printf("2\n");
		else printf("0\n");
	}
}


'PS > 백준 온라인 저지' 카테고리의 다른 글

백준 10172번: 개  (0) 2017.08.22
백준 1008번: A/B  (0) 2017.08.22
백준 1004번: 어린 왕자  (0) 2017.08.22
백준 1003번: 피보나치 함수  (2) 2017.08.22
백준 3052번: 나머지  (0) 2017.08.22
Comments