본문 바로가기

알고리즘/백준

[Python] 백준 파이썬 1358 하키

https://www.acmicpc.net/problem/1358

 

1358번: 하키

첫째 줄에 수 W H X Y P가 주어진다. P는 선수의 수이다. W와 H는 100보다 작거나 같은 자연수이고, H는 짝수이다. X와 Y는 절댓값이 100보다 작거나 같은 정수이다. P는 최대 50인 자연수이다. 둘째 줄부

www.acmicpc.net

# 백준 1358 하키
import math
w, h, x, y, p = map(int, input().split())

# 반지름, 각 원의 중심 좌표
r = h / 2
c1x, c1y = x, y+r
c2x, c2y = x+w, y+r

count = 0 # 링크 안에 있는 사람 수 

for _ in range(p):
  px, py = map(int, input().split())

  # 각 원의 중심에서의 거리
  d1 = math.sqrt((c1x - px) ** 2 + (c1y - py) ** 2)
  d2 = math.sqrt((c2x - px) ** 2 + (c2y - py) ** 2)

  if d1 <= r or d2 <= r:
    count += 1
  elif x <= px <= x+w and y <= py <= y+h:
    count += 1

print(count)

주어지는 사람들의 좌표가 각 원 안에 있거나 중간에 있는 사각형 안에 있으면 되는 간단한 문제였습니다.

 

한 가지 주의할 점은 문제에서 경계도 포함이라 했기 때문에 범위 설정할 때 생각해야 합니다.