문제/백준_파이썬
104. 1358(하키)
sm_hope
2022. 6. 23. 22:01
import sys
input = sys.stdin.readline
W, H, X, Y, P = map(int, input().split())
R = H//2
cnt = 0
for _ in range(P):
x, y = map(int, input().split())
# 첫번째 원 반경일 때
if((X-x)**2 + (Y+R-y)**2 <= R**2):
cnt += 1
# 직사각형 내외일 때
elif(X <= x <= X+W and Y <= y <= Y+H):
cnt += 1
# 두번째 원 반경일 때
elif((X+W-x)**2 + (Y+R-y)**2 <= R**2):
cnt += 1
print(cnt)
문제요약
하키장 내에(경계값과 안) 있는 선수는 몇명인가?
설명
문제는 이렇다.
두 원이 있고 하나의 직사각형이 있는데 선수의 좌표가 주어 졌을 때 반경내에 있는지에 대해 물어보는 것이다.
반지름은 H/2이다.
만약 선수좌표 내에 있다면
1. 첫번째 원에 있을 경우
다음과 같이 R 내부에 있어야 한다.
Y+R인 이유는
첫번째 원의 중심은 Y+R이다.
2. 직사각형 내에 있을 경우
좌표는 다음과 같다.
이 좌표 내에 있기 위해서는 x는 X와 X+W 내에, y는 Y와 Y+H에 있으면 된다.
3. 두번째 원에 있을 경우
다음과 같을 때 선수가 하키장에 있는 것이다.
따라서 위 3가지 경우 중 하나라도 해당된다면 그 선수는 하키장 내에 있는 것이다.