본문 바로가기

코딩테스트

[C++] 수직/수평 선분의 교차

숙제 4 (선분 교차)

개의선분이서로공통인점을가지고있을, 선분은서로교차한다고정의하며, 공통인점을교차점이라고부른다.또한, 선분이교차할, 교차선분의어느꼭지점속하않을경우선분은완전교차한다고정의한다.따라서, 완전교차하지않는선분이차하는경우는선분의교차점이선분의어느꼭지점포함하는경우이다. 이와같이분이서로교차하지만완전교차하지않는경우를특별히선분이해있다정의한다.

2차원평면상에X-좌표축에평행한선분과Y-좌표축에평행한개의선분이주어졌을, 개의선분이서로교차하는지를별하는프로그램을작성하시오

 

예시:

#include<iostream>
using namespace std;

void swap(int *x1, int *y1, int *x3, int *y3){
	int temp;

	temp=*x1;
	*x1=*x3;
	*x3=temp;

	temp=*y1;
	*y1=*y3;
	*y3=temp;


}

int main(){
	int x1,x2,x3,x4;
	int y1,y2,y3,y4;

	cin>>x1>>y1>>x2>>y2;
	cin>>x3>>y3>>x4>>y4;
	if(x1!=x2){
		swap(&x1,&y1,&x3,&y3);
		swap(&x2,&y2,&x4,&y4);
	}

	if(y1==y3 ||y2==y3) printf("2");
	else if(x1==x3||x1==x4) printf("2");
	else if(((x3<x4)&&(x3<x1&&x4>x1))||((x3>x4)&&(x4<x1&&x3>x1))){
		if(((y1<y2)&&(y1<y3&&y2>y3))||((y1>y2)&&(y2<y3&&y1>y3))) printf("1");	
		else printf("0");
	}
	else printf("0");
	cout<<endl;

	return 0;

}

'코딩테스트' 카테고리의 다른 글

[C++] 삼각형 면적  (0) 2021.06.27
[C++] 호텔  (0) 2021.06.27
[C++] 사각형과 점 과의 거리  (0) 2021.06.27
[C++] 삼각형의 종류 (2)  (0) 2021.06.27
[C++] 삼각형의 종류  (0) 2021.06.27