반응형
문제
지난주에, 민식주식회사는 IIHF(International Ice Hockey Federation)로부터 긴급한 전화를 받았다.
IIHF는 같은 팀이 링크안에 너무 많으면 알람이 울리는 시스템을 설치해달라고 요청했다. 시스템은 다음과 같이 3개의 부분으로 이루어진다.
- 디지털카메라가 링크의 사진을 매 1초마다 찍는다.
- 디지털카메라가 찍은 사진에서 각 선수의 위치를 뽑아낸다.
- 하키 링크 안에 같은 팀 선수가 총 몇 명인지 계산한다.
하키 링크는 (X, Y)가 가장 왼쪽 아래 모서리인 W * H 크기의 직사각형과, 반지름이 H/2이면서 중심이 (X, Y+R), (X+W, Y+R)에 있는 두 개의 원으로 이루어져 있다. 아래 그림을 참고한다.
선수들의 위치가 주어질 때, 링크 안 또는 경계에 있는 선수가 총 몇 명인지 구하는 프로그램을 작성하시오.
문제풀이
import sys,math
input=sys.stdin.readline
w,h,x,y,p=map(int,input().split())
#반지름
r=h/2
arr=[]
cnt=0
for _ in range(p):
arr.append(list(map(int,input().split())))
for i in arr:
#01
if x<=i[0]<=x+w and y<=i[1]<=y+h:
cnt+=1
#02
else:
a = math.sqrt((i[0]-x)**2+(i[1]-(y+r))**2)
b = math.sqrt((i[0]-(x+w))**2+(i[1]-(y+r))**2)
if a<=r or b<=r:
cnt+=1
else:
pass
print(cnt)
- #01 : 만약 입력받은 x,y 좌표가 w*h 크기의 직사각형 안에 있다면 cnt를 1 늘려준다.
- #02 : 그렇지 않다면 (X, Y+R), (X+W, Y+R) 즉 원의 두 중심과 입력받은 x,y 좌표의
거리를 각각 구하여 a와 b에 저장한다.
만약 a와 b중 하나라도 거리가 r보다 가깝다면 링크 안에 있기에 cnt를 1 늘려준다.
이후 cnt를 출력한다.
'프로그래밍 > 백준' 카테고리의 다른 글
[알고리즘] 백준 6322 파이썬 - 직각 삼각형의 두 변 (2) | 2022.12.29 |
---|---|
[알고리즘] 백준 10101 파이썬 - 삼각형 외우기 (1) | 2022.12.28 |
[알고리즘] 백준 22993 파이썬 - 서든어택 3 (2) | 2022.12.26 |
[알고리즘] 백준 13164 파이썬 - 행복 유치원 (0) | 2022.12.25 |
[알고리즘] 백준 15729 파이썬 - 방탈출 (1) | 2022.12.24 |