728x90
반응형
문제 출처:https://www.acmicpc.net/problem/1002
1002번: 터렛
각 테스트 케이스마다 류재명이 있을 수 있는 위치의 수를 출력한다. 만약 류재명이 있을 수 있는 위치의 개수가 무한대일 경우에는 -1을 출력한다.
www.acmicpc.net
풀이:
T = int(sys.stdin.readline())
distance = 0 # 대각
for i in range(T):
x1,y1,r1,x2,y2,r2 = list(map(int,(sys.stdin.readline().split())))
distance = ((x2 - x1) ** 2 + (y2 - y1) ** 2) ** 0.5 # 점 들 사이의 거리 피타고리스 사용
a = r1 + r2 # 두 반지름의 합
b = abs(r1-r2) # 두 반지름의 차
if distance == 0: #두 원의 중심이 같은 경우
if r1 == r2 :
print(-1)
else:
print(0)
else: # 두 원의 중심이 다른경우
if distance == a or distance == b: # 원이 접할때
print(1)
elif distance < a and distance > b : # 두개의 점이 접할때
print(2)
else:
print(0)
두 원이 만나는 점을 찾으면된다.
distance 가 0 일때는 두 원의 중심 같은 경우이므로 크기가 같으면 무한히 겹치므로 -1
한원이 원 안에 들어가있므녀 겹치는게 없으므로 0
두원의 중심이 다를 경우
접점이 한개면 외접이가나 내접이다.
즉 a 와 b의 합이 distance 와 같거나 두개의 차이의 절댓값이 distance와 같을때다
2를 출력하는 경우는 두 점에서 만나는 경우이다.
distance는 두 반지름의 합보다는 작고 차이보다는 커야한다.
그렇지 않으면 내접이 된다.
반응형
댓글