[파이썬] 백준 1002 : 터렛

728x90

[파이썬] 백준 1002 : 터렛

https://www.acmicpc.net/problem/1002

 

1002번: 터렛

각 테스트 케이스마다 류재명이 있을 수 있는 위치의 수를 출력한다. 만약 류재명이 있을 수 있는 위치의 개수가 무한대일 경우에는 -1을 출력한다.

www.acmicpc.net

실버 4

기하학, 수학


학교 다닐 때 배우는 두 원의 위치 관계를 이용해 풀 수 있는 문제.

https://mathbang.net/101

 

두 원의 위치관계, 내접, 외접

위치관계 또 나오네요. 이번에는 두 원의 위치관계에요. 위치관계 마지막이니까 정신 바짝 차리고 따라오세요. 원과 직선의 위치관계, 원의 할선과 접선, 접점에서 했던 것처럼 두 원이 어떤 관

mathbang.net

이곳을 참고해서 풀었다.

 

코드

import sys
N = int(sys.stdin.readline())
for _ in range(N):
    x1, y1, r1, x2, y2, r2 = map(int, sys.stdin.readline().split())
    S = ((x2-x1)**2 + (y2-y1)**2)**0.5

    if r1 == r2 and S == 0:
        print(-1)
    elif S > r1 + r2 or S < abs(r1 - r2):
        print(0)
    elif S == r1 + r2 or S == abs(r1 - r2):
        print(1)
    elif abs(r1 - r2) < S < r1 + r2:
        print(2)

abs는 ()안의 값에 대한 절댓값을 반환한다. r1과 r2 둘 중에 어느 반지름의 크기가 더 큰지 따로 조건식을 세울 필요가 없다.

 

S는 두 원 사이의 거리이다.

**0.5는 루트와 같다.

 

무한대의 경우를 생각해내기가 조금 힘들었는데, 두 원이 완전히 같은 원이면 어느 점에서나 무한대로 존재하게 된다.

따라서 두 반지름의 크기가 같고, 두 원 사이의 거리가 같을 경우가 무한대인 경우이다.

이 부분에서 많이 틀려서 정답률이 낮은 문제가 아닐까 싶다.

728x90