sm 기술 블로그
104. 1358(하키) 본문
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가지 경우 중 하나라도 해당된다면 그 선수는 하키장 내에 있는 것이다.
'문제 > 백준_파이썬' 카테고리의 다른 글
106. 1037(약수) (0) | 2022.06.24 |
---|---|
105. 5086(배수와 약수) (0) | 2022.06.24 |
103. 1004(어린 왕자) (0) | 2022.06.23 |
102. 1002(터렛) (0) | 2022.06.22 |
101. 택시 기하학(3053) (0) | 2022.06.22 |
Comments