본문 바로가기

백준

[백준] 1358 - 하키 (파이썬)

반응형

1. 문제

 

2. 코드

import math

w, h, x, y, p = map(int, input().split())
cnt = 0

for _ in range(p):
    p_x, p_y = map(int, input().split())
    if math.sqrt((p_x - x)**2 + (p_y - (y+h/2))**2) <= h/2 or math.sqrt((p_x-(x+w))**2 + (p_y - (y+h/2))**2) <= h/2 or (x <= p_x <= x+w and y <= p_y <= y+h):
        cnt += 1

print(cnt)

 

3. 풀이

세 가지 케이스를 고려하면 된다.

1) 왼쪽 반원 안에 있는 경우 : math.sqrt((p_x - x)**2 + (p_y - (y+h/2))**2) <= h/2

2) 오른쪽 반원 안에 있는 경우 : math.sqrt((p_x-(x+w))**2 + (p_y - (y+h/2))**2) <= h/2
3) 가운데 직사각형 안에 있는 경우 : x <= p_x <= x+w and y <= p_y <= y+h

728x90
반응형