반응형

문제풀이

 원의 접점의 개수를 구하는 문제이다.

 두 원의 반지름 r1, r2 중 작은 것을 r, 큰 것을 R, 중심 사이의 거리를 dist라 할 때, 접점의 개수는 다음과 같다.

 접점이 한 개인 경우 : 내접(dist + r == R) 또는 외접(dist == r + R)

 없는 경우 : 두 점 사이의 거리가 반지름의 합보다 큰 경우(dist > r+R), 또는 큰 원 안에 작은 원이 들어가 있는 경우(dist + r < R)

 두 개인 경우 : 나머지

Python Code

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
import sys, math
def solution(x1,y1,r1,x2,y2,r2):
  if x1 == x2 and y1 == y2 :
    if r1 == r2:
      return -1
    else :
      return 0
  
  dist = math.sqrt((x1-x2)**2 + (y1-y2)**2)
  r = min(r1,r2)
  R = max(r1,r2)
  s = r + R
 
  #떨어져서 또는 큰원 안에 작은 원
  if dist > s or (dist + r < R): return 0
 
  #내접, 내접
  elif dist + r == R or dist == s: return 1
 
  else : return 2
 
if __name__=="__main__":
  n = int(sys.stdin.readline())
  for _ in range(n):
    x1,y1,r1,x2,y2,r2 = map(int,sys.stdin.readline().split())
    print(solution(x1,y1,r1,x2,y2,r2))
cs

문제 링크

 

1002번: 터렛

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

www.acmicpc.net

 

반응형

'알고리즘 > 백준' 카테고리의 다른 글

백준 9465 스티커  (0) 2020.04.18
백준 11657 타임머신 / 벨만 포드 알고리즘  (0) 2020.04.11
백준 11048 이동하기  (0) 2020.03.30
백준 10610 30  (0) 2020.03.28
백준 2436 공약수  (0) 2020.03.24

+ Recent posts