출처: 백준 1004번 어린 왕자
문제의 핵심은 출발점과 도착점이 얼마나 많은 행성계에 속해 있는지이다.
출발점이 속한 행성계들에서 이탈해서, 도착점이 속한 행성계들로 진입해야 하기 때문이다.
만약, 출발점과 도착점이 모두 속한 행성계라면 이탈과 진입이 이루어지지 않기 때문에 횟수에서 빼주면 된다.
각 지점과 행성계 중심까지의 거리를 행성계 반지름과 비교하여, 속했는지 아닌지를 판별한다.
그리고 python
의 set
을 적극 활용하여서, 출발점과 도착점이 속한 행성계의 합집합에서 교집합을 뺀 요소의 개수를 출력하면 된다.
case = int(input())
for _ in range(case):
x1,y1,x2,y2 = map(int,input().split())
n = int(input())
start=set()
end=set()
for i in range(n):
cx,cy,r = map(int,input().split())
dis1 = (x1-cx)**2+(y1-cy)**2
dis2= (x2-cx)**2+(y2-cy)**2
if dis1 < r**2:
start.add(i)
if dis2 < r**2:
end.add(i)
print(len((start|end) - (start&end)))
처음 문제를 봤을 때는 문제 풀이를 어떻게 접근해야 될지 감이 안 잡혀서, 굉장히 어렵게 느껴졌었다.