일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 | 27 | 28 | 29 | 30 |
Tags
- 소수
- 탐욕법
- springboot
- HTTP
- brute force
- codility
- 파이썬
- counting elements
- javascript
- 알고리즘
- 백준
- applicationeventpublisher
- Greedy
- 코딩테스트
- API
- java
- Spring
- 2018 KAKAO BLIND RECRUITMENT
- algorithm
- 문자열
- Dijkstra
- error
- 라이브템플릿
- BFS
- beandefinitionstoreexception
- 2981
- Python
- 최단경로
- spring security
- 프로그래머스
Archives
- Today
- Total
Altiora Petamus
터렛 본문
🤔생각해보기
피타고라스 정리
를 활용하여 원의 교점을 구하는 문제다.
생각보다 고려해야할 조건이 많아서 성공할거라고 확신했음에도 7번 정도 실패했다...
하나씩 조건을 해결해가면 금방 풀 수 있는 문제이니 한 번 정리해보자.
우선 distance = 두 터렛 간의 거리 를 구해야 한다.
- 거리(distance)가 0 보다 커야 두 터렛이 같은 위치가 아니므로 아래 조건(2~4)을 적용한다.
- 만약 두 터렛이 각자 계산한 거리 r1, r2, 그리고 distance 중 가장 긴 값이 나머지 두 값의 합보다 크다면 만나지 않는다.
- distance = r1 + r2 라면 외접이며 1 곳에서 만난다.
- distance, r1, r2 중 가장 큰 값이 나머지 두 값의 합과 같다면 내접으로 1곳에서 만난다.
- distance가 0 이라면 두 터렛은 같은 위치에 있으므로 r1 == r2 라면 무한한 접점이 생긴다. -1 을 출력한다.
- distance가 0일 때 r1 ≠ r2 라면, 접점이 생기지 않는다.
import math
import sys
T = int(sys.stdin.readline())
for _ in range(T):
x1, y1, r1, x2, y2, r2 = map(int, sys.stdin.readline().split())
# 두 터렛 간의 거리(distance)
c = (abs(x2 - x1) ** 2) + (abs(y2 - y1) ** 2)
distance = math.sqrt(c)
# 거리가 0보다 커야 같은 위치가 아니다.
# 외접, 내접을 고려해야한다.
r = sorted([distance, r1, r2])
if distance > 0:
# 외접
if distance == r1 + r2:
print(1)
# 내접
elif r[-1] == r[0] + r[1]:
print(1)
# 가장 긴 값이 나머지 합보다 클 경우 만나지 않는다.
elif r[-1] > r[0] + r[1]:
print(0)
else:
print(2)
else:
if r1 == r2:
print(-1)
else:
print(0)
'1day-1algorithm' 카테고리의 다른 글
소수 구하기 (에라토스테네스의 체) (0) | 2021.06.18 |
---|---|
Odd Occurrences In Array (0) | 2021.06.18 |
네 번째 점 (0) | 2021.06.16 |
수 찾기 (0) | 2021.06.15 |
베르트랑 공준 (0) | 2021.06.12 |