본문 바로가기
알고리즘

[알고리즘/백준] 1358번 하키 Python 파이썬

by 배애앰이 좋아 2023. 3. 9.
반응형

 

이번 문제는 직사각형, 원의 공식만 알면 쉬운 문제입니다.

 

 

위 하키장 그림 안에 선수가 있나 없나를 계산하는 문제로 저같은 경우 직사각형에 있는지 검사하고 없으면 반원에 있는지 확인해주었습니다. 직사각형이야 좌표로 계산해주었고 반원같은 경우 원의 내부의 점을 판별하는 공식을 이용했습니다.

 

 

위 그림 출처 : https://wjs7347.tistory.com/18

걸쳐있어도 되기 때문에 <= 으로 바꿔서 조건을 검사해주었습니다.

 

다음과 같은 코드를 통해 통과하였습니다.

 

import sys
input = sys.stdin.readline

W, H, X, Y, P = map(int, input().split())
check_people = 0

for i in range(P):
    x, y = map(int, input().split())
    
    radius = H/2
    distance1 = ((x-X)**2 + (y-(Y+radius))**2)
    distance2 = ((x-(X+W))**2 + (y-(Y+radius))**2)
    radius_2 = radius*radius

    if (X+W) >= x and x >= X and y >= Y and y <= (Y+H): # 사각형
        check_people += 1
    elif distance1 <= radius_2 or distance2 <= radius_2: # 반원
        check_people += 1
        
print(check_people)

 

**2 이 제곱을 나타내는 것을 알고 있으면 좋을 거 같습니다.

반응형

댓글