-
[BOJ] 1002번Algorithm/Baekjoon Online Judge 2022. 3. 16. 17:29728x90
https://www.acmicpc.net/problem/1002
Python3
import math if __name__ == '__main__': n = int(input()) for _ in range(n): x1, y1, r1, x2, y2, r2 = map(int, input().split()) distance = math.sqrt((x1 - x2) ** 2 + (y1 - y2) ** 2) if distance == 0 and r1 == r2: print(-1) elif abs(r1 - r2) == distance or r1 + r2 == distance: print(1) elif abs(r1 - r2) < distance < (r1 + r2): print(2) else: print(0)
두 좌표와 거리가 주어질 때 이를 다시 생각하면 두 원의 좌표와 반지름이 주어질 때 이 두 원이 몇개의 점에서 만나는지 구하는 문제이다. 따라서 원의 중심 좌표 2개를 받았을 때 이 두 원사이의 거리를 구하는 공식이 필요하다.
다음과 같이 두 원 사이의 거리를 구할 수 있다. 이 거리와 두 원의 위치를 이용해 원의 접점의 개수를 구한다.
1. 두원이 동심원이고 반지름이 같을 때 = 접점의 개수가 무한대
2. 내접 또는 외접일 때 = 접점이 1개
3. 두 원이 서로 다른 두 점에서 만날 때 = 접점이 2개
4. 이외의 경우 = 접점이 0개
이 경우에 대해 코드를 작성한다.
if distance == 0 and r1 == r2: print(-1) elif abs(r1 - r2) == distance or r1 + r2 == distance: print(1) elif abs(r1 - r2) < distance < (r1 + r2): print(2) else: print(0)
1번의 경우 동심원이기 때문에 distance가 0이고 두 반지름이 같은 조건이다.
2번의 경우 내접일 경우 distance가 두 반지름의 차이랑 같은 조건이다.
3번의 경우 서로 다른 두점에서 만나기 때문에 반지름의 차이가 distance보다는 크고 반지름의 합보다는 작은 조건이다.
4번의 경우 이외의 경우에 대한 조건이다.
728x90'Algorithm > Baekjoon Online Judge' 카테고리의 다른 글
[BOJ] 2798번 (0) 2022.03.21 [BOJ] 11729번 (0) 2022.03.20 [BOJ] 3053번 (0) 2022.03.16 [BOJ] 4153번 (0) 2022.03.16 [BOJ] 3009번 (0) 2022.03.15