본문 바로가기

알고리즘/SWEA

6853

static pair<int, int> p[3], t;
static int N, ans[3];

static void check()
{
	if (t.first < p[0].first || t.first > p[1].first || 
    t.second < p[0].second || t.second > p[1].second)
		ans[2] += 1;
	else if (t.first > p[0].first && t.first < p[1].first && 
    t.second > p[0].second && t.second < p[1].second)
		ans[0] += 1;
	else
		ans[1] += 1;
}

static void move_to_zero()
{
	if (p[0].second < p[1].second)
	{
		if (p[0].first < p[1].first)
		{
			//empty,
		}
		else
		{
			p[0].first -= (p[0].first - p[1].first);
			p[1].first += (p[0].first - p[1].first);
		}
	}
	else
	{
		if (p[0].first < p[1].first)
		{
			p[2] = p[0];
			p[0] = p[1];
			p[1] = p[2];
		}
		else
		{
			p[0].second -= (p[0].second - p[1].second);
			p[1].second += (p[0].second - p[1].second);
		}
	}
}

static void solution(void)
{
	for (int i = 0; i < 2; i++)
		scanf("%d %d", &p[i].first, &p[i].second);
	scanf("%d", &N);

	move_to_zero();
	for (int i = 0; i < N; i++)
	{
		scanf("%d %d", &t.first, &t.second);
		check();
	}

	printf("%d %d %d\n", ans[0], ans[1], ans[2]);
	memset(ans, 0, sizeof(ans));
}

직사각형을 구성하는 두 정점의 좌표는 아래와 같은 형식들로 입력 받을 수 있다.

그래서 move_to_zero() 함수는 이러한 각각의 경우들에 대해서 첫번째 케이스와 같은 형태로 좌표를 변환 해준다.

그리고 check() 함수는 이러한 상태에서 입력받은 좌표가 직사각형 외부, 내부 혹은 각 변에 걸치는지에 관해 체크해준다.

'알고리즘 > SWEA' 카테고리의 다른 글

8191  (0) 2021.11.01
8189  (0) 2021.11.01
7393  (0) 2021.11.01
7102  (0) 2021.11.01
7193  (0) 2021.11.01