ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • [Python] 백준 1002 터렛
    Python_알고리즘 2021. 8. 6. 00:56
    문제 바로가기

       문제분석   

    # 두 점에서 각각 적까지의 거리가 주어지므로 두개의 원을 만들 수 있다.

    # 이 때, 두 원의 교점이 적의 위치가 되기 때문에 교점의 개수가 답이 된다.

    # 네가지 케이스로 나눠서 풀이한다.

    • 거리가 0이 아니라면 두 원의 중심 사이의 거리를 반지름의 합, 차와 비교한다.(거리가 0일 경우라면 두 원이 일치하므로 무한대 경우의 수가 나온다.)
    • 거리가 반지름의 합과 같다면 두 원이 밖에서 만나게되고(원이 외접하는 것),
    • 차와 갑다면 한 원 안의 다른 원이 한 점에서 만난다(원이 내접하는 것).
    • 거리가 반지름의 합보다 작고 차보다 크면, 두 점에서 만난다.
    • 나머지 경우는 서로 만나지 않는 경우다.

     

     

       문제풀이   

    T = int(input())
    
    for i in range(T):
        x1, y1, r1, x2, y2, r2 = map(int, input().split())
    
        r = ((x1 - x2)**2 + (y1 - y2)**2)**0.5  # 두 점의 좌표가 주어졌을 때 거리 구하는 공식
        R = [r1, r2, r]
    
        m = max(R)
        R.remove(m)
    
        if r == 0 and r1 == r2:  # 두 점의 거리가 0이고 반지름이 같다는건 겹치는 원이라는 뜻
            print(-1)
        elif r == r1 + r2 or m == sum(R):   # 외접하거나 내접할때라는 뜻
            print(1)
        elif m > sum(R):    # 두 원이 겹치지 않을때라는 뜻
            print(0)
        else:   # 그 이외의 경우는 모두 두번 만나는 것.
            print(2)

     

     

     

     

    'Python_알고리즘' 카테고리의 다른 글

    [Python] 백준 2798 블랙잭  (0) 2021.08.06
    [Python] 백준 2579 계단 오르기  (0) 2021.08.05
    [Python] 백준 9663 N-Queen  (0) 2021.08.04
    [Python] 백준 15650 N과 M (2)  (0) 2021.08.03
    [Python] 백준 2108 통계학  (0) 2021.07.31

    댓글

Designed by Tistory.