ps:problems:boj:1002
터렛
ps | |
---|---|
링크 | acmicpc.net/… |
출처 | BOJ |
문제 번호 | 1002 |
문제명 | 터렛 |
레벨 | 실버 4 |
분류 |
기하 |
시간복잡도 | O(1) |
사용한 언어 | Python |
제출기록 | 29200KB / 88ms |
최고기록 | 52ms |
해결날짜 | 2021/09/25 |
풀이
- 각 터렛을 기준으로 마린이 있을수 있는 좌표의 범위를 그려보면, 반지름이 r인 원으로 나타난다. 두개의 원의 교점의 갯수를 구하면 된다.
- 중점간의 거리와 두 반지름의 합 또는 차에 따라서, 두 원은 두 점에서 만나거나, 접하거나 (내접 or 외접), 접하지 않거나 (멀리 떨어져 있거나 한 원이 다른 원 안에 포함되거나), 일치하거나 할 수 있다. 각각의 조건은 그냥 그림을 그려보면 쉽게 파악 가능하고, 거기에 맞춰서 조건 분기를 하는 코드를 짜면 끝.
코드
"""Solution code for "BOJ 1002. 터렛".
- Problem link: https://www.acmicpc.net/problem/1002
- Solution link: http://www.teferi.net/ps/problems/boj/1002
"""
def main():
T = int(input())
for _ in range(T):
x1, y1, r1, x2, y2, r2 = [int(x) for x in input().split()]
dist = (x1 - x2) ** 2 + (y1 - y2) ** 2
r_sum, r_diff = (r1 + r2) ** 2, (r1 - r2) ** 2
if dist == 0 and r1 == r2:
print('-1')
elif r_diff < dist < r_sum:
print('2')
elif dist in (r_diff, r_sum):
print('1')
else:
print('0')
if __name__ == '__main__':
main()
ps/problems/boj/1002.txt · 마지막으로 수정됨: 2021/09/29 00:29 저자 teferi
토론