[백준 1358 파이썬] 하키 (실버 4, 기하)

배코딩·2022년 6월 8일
0

PS(백준)

목록 보기
90/118

알고리즘 유형 : 기하
풀이 참고 없이 스스로 풀었나요? : O

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




소스 코드(파이썬)

import sys
input = sys.stdin.readline

W, H, X, Y, P = map(int, input().split())
count = 0
for _ in range(P):
    x, y = map(int, input().split())
    
    # 가운데 직사각형 내부에 있는 경우(둘레 포함)
    if (X <= x <= X+W) and (Y <= y <= Y+H):
        count +=1
        continue
    
    # 왼쪽 반원, 오른쪽 반원 내부에 있는 경우(둘레 포함)
    R = H/2
    d1 = ((x-X)**2 + (y-(Y+R))**2)**0.5
    d2 = ((x-(X+W))**2 + (y-(Y+R))**2)**0.5
    if d1 <= R or d2 <= R:
        count += 1

print(count)



풀이 요약

  1. 세 경우로 나눈다.

    1) 가운데 직사각형 부분에 선수가 있는 경우
    2) 왼쪽 반원에 있는 경우
    3) 오른쪽 반원에 있는 경우


  1. 가운데 직사각형 부분에 있는 경우는 간단한 조건문으로 카운팅해줄 수 있다.

    반원의 경우, "선수의 좌표와 원의 중심과의 거리"와 "원의 반지름"을 비교하여 원의 내부에 있는지를 판별한다. (나머지 반원은 어차피 직사각형에 포함되는 부분이므로 완전한 원에 대해 포함 여부 검사해줘도 무관)

profile
PS, 풀스택, 앱 개발, 각종 프로젝트 내용 정리 (https://github.com/minsu-cnu)

0개의 댓글