sm 기술 블로그

104. 1358(하키) 본문

문제/백준_파이썬

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가지 경우 중 하나라도 해당된다면 그 선수는 하키장 내에 있는 것이다.

'문제 > 백준_파이썬' 카테고리의 다른 글

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