https://www.acmicpc.net/problem/1002
1002번: 터렛
각 테스트 케이스마다 류재명이 있을 수 있는 위치의 수를 출력한다. 만약 류재명이 있을 수 있는 위치의 개수가 무한대일 경우에는 -1을 출력한다.
www.acmicpc.net
'''
1002번 - 터렛 / silver 3 / 수학-기하학
'''
import sys
import math
input = sys.stdin.readline
t = int(input())
for _ in range(t):
a, b, c, x, y, z = map(int, input().split())
dis = math.sqrt((a-x)**2 + (b-y)**2)
if dis == 0:
if c==z:
print(-1)
else:
print(0)
else:
if c+z == dis or abs(c-z) == dis:
print(1)
elif abs(c-z) < dis < c+z:
print(2)
else:
print(0)
해당 문제를 풀기 위해서는 수학 지식 필요
좌표와 거리를 입력 받으면, 원을 하나 만든다고 생각
- 좌표는 중점, 거리는 해당 원의 반지름
따라서 좌표와 거리를 두 번 입력 받으니 원을 두개 만든다고 생각
1. 두 원의 중심 거리를 구하기 (dis)
2. dis == 0 이면 두 원의 중점 좌표가 같다는 의미
2-1. 두 원의 거리 또한 같으면, 똑같은 두 원이 겹쳐있는 경우 / -1
2-2. 거리가 다르면, 중점좌표가 같지만, 원의 크기가 다른 경우 / 0
3. dis != 0 이면 중점 좌표가 다르다는 의미
3-1. 1번 원 반지름 + 2번 원 반지름 == dis 이면, 두 원이 외접해 있는 경우 / 1
3-1. abs(1번 원 반지름 - 2번 원 반지름) == dis 이면, 두 원이 내접해 있는 경우 / 1
3-2. abs(1번 반지름 - 2번 반지름) < dis < (1번 반지름 + 2번 반지름) 이면, 두 원이 접점 두개를 찍을 수 있는 경우 / 2
3-3. 그 외는 두 원이 서로 멀리 떨어져 있는 경우로 / 0
'백준 문제풀이' 카테고리의 다른 글
14501번 - 퇴사 / silver 3 / DP (0) | 2023.02.03 |
---|---|
2193번 - 이친수 / silver 3 / DP (0) | 2023.02.02 |
1026 - 보물 / silver 4 / 정렬, 그리디 (0) | 2023.01.31 |
4485번 - 녹색 옷 입은 애가 젤다지? / gold 4 / 다익스트라 (0) | 2023.01.30 |
1261번 - 알고스팟 / gold 4 / 다익스트라 (0) | 2023.01.29 |