[BOJ] 터렛

Minsu Han·2022년 11월 1일
0

알고리즘연습

목록 보기
48/105

코드

import sys
input = sys.stdin.readline

for _ in range(int(input())):
    x1, y1, r1, x2, y2, r2 = map(int, input().split())
    dist = ((x2-x1)**2 + (y2-y1)**2)**(1/2)
    maxv, minv = float(max(r1, r2)), float(min(r1, r2))
    sum = maxv + minv

    if x1 == x2 and y1 == y2 and r1 == r2:
        print(-1)
    elif maxv > dist + minv:
        print(0)
    elif maxv == dist + minv and dist > 0:
        print(1)
    elif dist < sum:
        print(2)
    elif dist == sum:
        print(1)
    elif dist > sum:
        print(0)

결과

image


풀이 방법

  • 두 사람의 좌표에서 반지름이 각각 r1, r2인 원을 그렸을 때 교차점의 개수를 찾는 문제이다
  • 두 사람의 좌표가 같고 r1 == r2 인 경우: 무한대
  • max(r1, r2) > 두 사람 간 거리 + min(r1, r2) 인 경우: 0개
  • max(r1, r2) == 두 사람 간 거리 + min(r1, r2) 이고 두 사람 간 거리 > 0 인 경우: 1개
  • 이외에,
  • 두 사람 간의 거리 < r1 + r2 인 경우: 2개
  • 두 사람 간의 거리 == r1 + r2 인 경우: 1개
  • 두 사람 간의 거리 > r1 + r2 인 경우: 0개

profile
기록하기

0개의 댓글