백준 1358 c++

magicdrill·2024년 3월 2일
0

백준 문제풀이

목록 보기
79/655

백준 1358 c++

한번 영역을 정하고 점이 그 영역 안에 포함되면 결과를 반환하도록 하고 싶었는데 영역을 매번 계산하는 방식으로 구현했다. 영역계산을 한번만 하는 식으로 만들고 싶다.

#include <iostream>
#include <vector>

using namespace std;

void input_info(int *W, int *H, int *X, int *Y, int *P, vector <pair<int, int>> &player_position)
{
	int i;
	int x, y;

	cin >> *W >> *H >> *X >> *Y >> *P;
	for (i = 0; i < *P; i++)
	{
		cin >> x >> y;
		player_position.push_back({ x, y });
	}

	return;
}

bool in_the_ground(int W, int H, int X, int Y, int player_x, int player_y)
{
	bool result = false;
	int mid_height = H / 2;
	int radius_square = mid_height * mid_height;

	//cout << W << " " << H << " " << X << " " << Y << " " << player_x << " " << player_y << " " << mid_height << " " << radius_square << "\n";
	//왼쪽 원에 있는지
	if (((X - player_x)*(X - player_x)) + ((Y + mid_height - player_y)*(Y + mid_height - player_y)) <= radius_square && 
		((player_x >= X - mid_height && player_x <= X) && (player_y >= Y && player_y <= Y + H)))
	{
		result = true;
		return result;
	}
	else
	{
		result = false;
	}
	//cout << "왼쪽 원 안에 있음\n";
	//가운데 사각형에 있는지
	if ((player_x >= X && player_x <= X + W) && (player_y >= Y && player_y <= Y + H))
	{
		result = true;
		return result;
	}
	else
	{
		result = false;
	}
	//cout << "가운데 사각형 안에 있음\n";
	//오른쪽 원에 있는지
	if (((X + W - player_x) * (X + W - player_x)) + ((Y + mid_height - player_y) * (Y + mid_height - player_y)) <= radius_square &&
		((player_x >= X + W && player_x <= X + W + mid_height) && (player_y >= Y && player_y <= Y + H)))
	{
		result = true;
		return result;
	}
	else
	{
		result = false;
	}
	//cout << "오른쪽 원 안에 있음\n";

	return result;
}

void find_answer(int W, int H, int X, int Y, int P, vector <pair<int, int>> player_position)
{
	int i;
	int count = 0;

	for (i = 0; i < P; i++)
	{
		if (in_the_ground(W, H, X, Y, player_position[i].first, player_position[i].second))
		{
			count++;
		}
		else
		{
			;
		}
	}
	cout << count << "\n";

	return;
}

int main(void)
{
	ios_base::sync_with_stdio(false);
	cin.tie(NULL);
	cout.tie(NULL);

	int W, H, X, Y, P;
	vector <pair<int, int>> player_position;

	input_info(&W, &H, &X, &Y, &P, player_position);
	find_answer(W, H, X, Y, P, player_position);

	return 0;
}

0개의 댓글