본문 바로가기

알고리즘 && 자료구조/백준

[백준 1002] 터렛 (Feat. Python)

728x90
반응형
SMALL

문제

이석원은 조규현과 백승환에게 상대편 마린(류재명)의 위치를 계산하라는 명령을 내렸다. 조규현과 백승환은 각각 자신의 터렛 위치에서 현재 적까지의 거리를 계산했다.

조규현의 좌표 (x1,y1) 와 백승환의 좌표 가 주어지고, 조규현이 계산한 류재명과의 거리 과 백승환이 계산한 류재명과의 거리 가 주어졌을 때, 류재명이 있을 수 있는 좌표의 수를 출력하는 프로그램을 작성하시오.

풀이

  • 주어진 두 점의 거리는 구하는 공식을 이용하여 두 점의 거리를 계산 = length
  • 주어진 반지름의 차이를 계산 = diff
    • 이 두변수를 사용하여 두개의 원 접점이 하나인지 혹은 동일한 원인지, 혹은 두개인지를 알 수 있다.
    • 만약 두점의 거리가(length) 두 반지름의 차이보다 크고 두 반지름의 합보다 크다면 접접은 두개
      • diff< length and length < r1+r2
    • 만약 반지름의 두 합과 length가 같거나 주 반지름의 차이가(diff) length와 같은 경우 접점은 1개
      • length == r1 + r2 or length == diff
    • 만약 length가 0 이고 두 반지름의 길이가 같다면 둘은 같은 원이므로 -1
      • length == 0 and r1 == r2
    • 위의 조건을 충족하지 못한 입력은 접점이 없으므로 0을 출력해야 한다.
from math import sqrt

N = int(input())
answer = []

for _ in range(N):
    x1, y1, r1, x2, y2, r2 = map(int, input().split())
    length = sqrt((x1 - x2) ** 2 + (y1 - y2) ** 2)
    diff = abs(r1 - r2)
    if length == 0 and r1 == r2:
        answer.append(-1)
    elif length == r1 + r2 or diff == length:
        answer.append(1)
    elif diff < length < r1 + r2:
        answer.append(2)
    else:
        answer.append(0)

for i in range(N):
    print(answer[i])

 

 

 

 

728x90
반응형
LIST