본문 바로가기

알고리즘/백준

[Python] 백준 파이썬 1004 어린 왕자

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

 

1004번: 어린 왕자

입력의 첫 줄에는 테스트 케이스의 개수 T가 주어진다. 그 다음 줄부터 각각의 테스트케이스에 대해 첫째 줄에 출발점 (x1, y1)과 도착점 (x2, y2)이 주어진다. 두 번째 줄에는 행성계의 개수 n이 주

www.acmicpc.net

# 백준 1004 어린 왕자
import math
t = int(input())

for i in range(t):
  x1, y1, x2, y2 = map(int,input().split())

  n = int(input())
  
  count = 0 

  for j in range(n):
    cx, cy, r = map(int, input().split())
    
    d1 = math.sqrt((x1-cx) ** 2 + (y1-cy) ** 2)
    d2 = math.sqrt((x2-cx) ** 2 + (y2-cy) ** 2)

    if d1 < r and d2 > r:
      count += 1
    elif d1 > r and d2 < r:
      count += 1
    elif d1 < r and d2 < r:
      pass
    elif d1 > r and d2 > r:
      pass
  
  print(count)

행성의 경계를 지나는 경우는 위 그림과 같은 경우밖에 없습니다.

 

출발점과 도착점 각각 원의 중심과의 거리 d1, d2를 구하고 

 

d1 또는 d2 중 하나만 원의 반지름 r 보다 작을때 경계를 지나게 됩니다.