[c++/백준] 1358번: 하키

조히·2023년 4월 27일
0

PS

목록 보기
68/82

문제 링크

1358번: 하키

풀이

간단한 기하 문제

  1. 먼저 선수들의 위치를 입력받아 check 함수를 호출한다.
  2. check 함수는 각각 직사각형, 왼쪽 반원, 오른쪽 반원 내에 있는지 체크해서 return한다.
    2-1. 직사각형의 왼쪽 아래 점과 오른쪽 위에 점 내부에 있으면 return
    2-2. 반원은, 원 중심 좌표와 선수들의 위치 사이 거리를 계산해 반지름보다 작다면 return한다.

코드

#include <iostream>
#include <cmath>
using namespace std;

int w, h, x, y;

bool check(int px, int py)
{
	if (x <= px && px <= x + w && y <= py && py <= y + h) // 직사각형 내부
	{
		return 1;
	}
	else if (pow(x - px, 2) + pow(y + h / 2 - py, 2) <= pow(h / 2, 2))
	{
		return 1;
	}
	else if (pow(x + w - px, 2) + pow(y + h / 2 - py, 2) <= pow(h / 2, 2))
	{
		return 1;
	}
	return 0;
}

int main(void)
{
	int p;
	int answer = 0;
	cin >> w >> h >> x >> y >> p;
	for (int i = 0; i < p; i++)
	{
		int px, py;
		cin >> px >> py;
		answer += check(px, py);
	}

	cout << answer << endl;

	return 0;
}
profile
Juhee Kim | Game Client Developer

0개의 댓글