728x90
정답 비율 : 68.213%
언어 : python
레벨 : 실버 4
링크
https://www.acmicpc.net/problem/1358
문제
지난주에, 민식주식회사는 IIHF(International Ice Hockey Federation)로부터 긴급한 전화를 받았다.
IIHF는 같은 팀이 링크안에 너무 많으면 알람이 울리는 시스템을 설치해달라고 요청했다. 시스템은 다음과 같이 3개의 부분으로 이루어진다.
- 디지털카메라가 링크의 사진을 매 1초마다 찍는다.
- 디지털카메라가 찍은 사진에서 각 선수의 위치를 뽑아낸다.
- 하키 링크 안에 같은 팀 선수가 총 몇 명인지 계산한다.
하키 링크는 (X, Y)가 가장 왼쪽 아래 모서리인 W * H 크기의 직사각형과, 반지름이 H/2이면서 중심이 (X, Y+R), (X+W, Y+R)에 있는 두 개의 원으로 이루어져 있다. 아래 그림을 참고한다.
선수들의 위치가 주어질 때, 링크 안 또는 경계에 있는 선수가 총 몇 명인지 구하는 프로그램을 작성하시오.
입력
첫째 줄에 수 W H X Y P가 주어진다. P는 선수의 수이다. W와 H는 100보다 작거나 같은 자연수이고, H는 짝수이다. X와 Y는 절댓값이 100보다 작거나 같은 정수이다. P는 최대 50인 자연수이다. 둘째 줄부터 P개의 줄에 각 선수들의 x좌표와 y좌표가 주어진다. 이 좌표는 절댓값이 300보다 작거나 같은 정수이다.
출력
첫째 줄에 링크 안에 있는 선수의 수를 출력한다.
- 예제 입력
20 10 5 0 3
15 5
1 5
1 1
- 예제 출력
2
풀이 코드
# 1358번 하키
W, H, X, Y, p = map(int, input().split())
r = H/2
sum1 = 0
def Incir(a, b, x, y, r):
return pow(x - a, 2) + pow(y - b, 2) <= pow(r, 2)
for i in range(p):
x, y = map(int, input().split())
if x>=X and y>=Y and x <= X+W and y <= Y+H:
sum1 += 1
elif Incir(X, Y+r, x, y, r):
sum1 += 1
elif Incir(X+W, Y+r, x, y, r):
sum1 += 1
print(sum1)
※ 시행착오
정사각형 부분에 들어가는 건 어렵지 않았다. 하지만 원부분안에 들어가는 방법을 고민했고 수학적인 식을 사용하니 크게 어렵지는 않았다. 코드가 지저분해지는걸 막기 위해 함수 사용
728x90
'Programming' 카테고리의 다른 글
[1544번] 사이클단어 with python (0) | 2022.07.20 |
---|---|
[1940번] 주몽 with python (0) | 2022.07.14 |
[1764번] 듣보잡 with python (0) | 2022.07.13 |
알고리즘 _ 객체지향프로그래밍_ OOP란?(Python) (0) | 2021.09.15 |