study/알고리즘 문제 풀이

[python] 1002 터렛

dddzr 2022. 6. 9. 21:57

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

 

1002번: 터렛

각 테스트 케이스마다 류재명이 있을 수 있는 위치의 수를 출력한다. 만약 류재명이 있을 수 있는 위치의 개수가 무한대일 경우에는 -1을 출력한다.

www.acmicpc.net

 

처음 푼 것

 

T = int(input())
for i in range(T) :
  x1, y1, r1, x2, y2, r2 = map(int, input().split())
  
  if x1 == x2 and y1 == y2: #두 점이 같을 때
    if r1 == r2: #거리 같을 때
      print(-1)
    else:#거리 다를 때
      print(0)
  elif (r1+r2)**2 == (x1-x2)**2+(y1-y2)**2 or (r1-r2)**2 == (x1-x2)**2+(y1-y2)**2:
    print(1)
  elif (r1+r2)**2 > (x1-x2)**2+(y1-y2)**2 and (x1-x2)**2+(y1-y2)**2 > (r1-r2)**2:
    print(2)
  else : #(r1+r2)**2 < (x1-x2)**2+(y1-y2)**2 or (x1-x2)**2+(y1-y2)**2 < (r1-r2)**2
    print(0)

 

개선

원을 두개 그려서 생각하면 쉬움

import math

sqrt : 루트

abs() : 절댓값 함수

import math

n = int(input())

for _ in range(n):
    x1, y1, r1, x2, y2, r2 = map(int, input().split())
    d = math.sqrt((x1-x2)**2 + (y1-y2)**2)  # 두 점(원)의 거리 distance
    if d == 0 and r1 == r2 :  # 동심원이고 반지름이 같을 때
        print(-1)
    elif abs(r1-r2) == d or r1 + r2 == d:  # 내접, 외접일 때
        print(1)
    elif abs(r1-r2) < d < (r1+r2) :  # 두 점에서 만날 때
        print(2)
    else:
        print(0)  # 내부/외부에 있을 때 (접하지 x)

'study > 알고리즘 문제 풀이' 카테고리의 다른 글

[python] 2293 동전1  (0) 2022.06.09
[python] 1026 보물  (0) 2022.06.09
[python] 1085 직사각형에서 탈출  (0) 2022.06.06
[python]1059 좋은구간 - 틀림!!  (0) 2022.06.06
[python] 1072 게임  (0) 2022.06.06