반응형
문제풀이
원의 접점의 개수를 구하는 문제이다.
두 원의 반지름 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 |