컴공생의 다이어리

[c++] 두 지점 A, B 사이에 위치할 수 있는 C 본문

Development/C & C++

[c++] 두 지점 A, B 사이에 위치할 수 있는 C

컴공 K 2021. 2. 14. 23:22

문제

두 지점 A와 B의 위치 정보와 A와 B의 각 지점에서 지점 C까지의 거리가 주어지면 지점 C가 위치 할 수있는 좌표의 수를 계산한다. 위치 정보는 좌표로 표시된다. A와 B의 좌표가 (x1, y1), (x2, y2)이면 A에서 C까지의 거리가 d1이고 B에서 C까지의 거리가 d2이면 x1, y1, d1, x2 , y2, d2의 입력의 형식은 다음과 같다. 첫 번째 줄에 테스트 할 횟수를 입력한다. 다음 줄부터 위에 기록 된만큼 테스트 케이스를 작성한다. C가 위치 할 수있는 좌표가 무한대이면 출력은 1이다.

 

 

코드

#include<iostream>
#include <cmath>
using namespace std;
typedef struct{
	int x;  //x = x cordiante
	int y;  //y = y cordiante
	int dis; //dis = distance
}dot;

double DISTANCE(double x1, double y1, double x2, double y2){ //distance between dot 1 and dot 2
	return sqrt((double)((x1 - x2) * (x1 - x2) + (y1 - y2) * (y1 - y2)));
}

int result(dot dot1, dot dot2) {
	int n;
	double distance = DISTANCE(dot1.x, dot1.y, dot2.x, dot2.y);

	if (abs(dot1.dis - dot2.dis) > distance) { // = no intersection
		n = 0;
	}

	else if (abs(dot1.dis - dot2.dis) == distance) { // = 1 intersection or Infinite intersection
		if (dot1.dis == 0 && dot2.dis == 0) {
			n = 1;
		}
		else if (dot1.dis == dot2.dis) {// = Infinite intersection 
			n = -1;
		}
	}
	else if (abs(dot1.dis - dot2.dis) < distance && distance < (dot1.dis + dot2.dis)){ // = 2 intersection
		n = 2;
	}

	else if (distance == (dot1.dis + dot2.dis)){ // = 1 intersection
		n = 1;
	}

	else if (distance > (dot1.dis + dot2.dis)){ // = no intersection
		n = 0;
	}

	return n;
}

int main(){
	int test; // the size of test
	int *arr;
	while (1){
		cout << "test할 횟수 : ";
		cin >> test;
		if (test > 0)
			break;
		cout << "1이상 숫자만 가능합니다!" << endl << endl;
	}
	arr = new int[test];
	dot dot1, dot2;

	for (int i = 0; i < test; i++){
		//first dot
		cin >> dot1.x;//x1
		cin >> dot1.y;//y1
		cin >> dot1.dis;//dis1
		//second dot
		cin >> dot2.x;//x2
		cin >> dot2.y;//y2
		cin >> dot2.dis;//dis2

		arr[i] = result(dot1, dot2);
	}

	for (int i = 0; i < test; i++){
		cout << arr[i] << endl;
	}
	delete[]arr;

	return 0;
}

 

출력결과

728x90
Comments