본문 바로가기
코딩테스트/파이썬

[백준] [수학] 터렛 1002 (파이썬)

by 커피는아아 2021. 3. 15.
반응형

문제 접근

  • 고등학교 때 배운 수학 중 원의 특성에 대해 알고 있어야 이 문제를 풀 수 있다.
  • 처음엔 단순이 거리로 비교할 수 있을 것이라 생각하고 피타고라스 정리로 접근하여서 실패하였으나 원으로 바꿔서 풀이에 성공하였다.

스케치

코드

# 터렛

import sys, math

T = int(sys.stdin.readline().rstrip())

for _ in range(T):
    data = list(map(int, sys.stdin.readline().rstrip().split())) # x1,y1,r1,x2,y2,r2

    jo = data[0:3]
    baek = data[3:]
    # 조규현 백승환 터렛 근무 직원
    # 이석원 (명령자) 조규현 백승환에게 류재명의 위치를 찾으라
    # 조규현 좌표, 류재명과의 거리 (x1, y1, r1) 백승환 좌표(x2,y2,r2)
    # 류재명이 있을 수 있는 좌표의 수를 출력하시오

    # (0,0,13) (40,0,37) -> 2
    # (0,0,3) (0,7,4) -> 1
    # (1,1,1) (1,1,5) -> 0

    def getCount(v1, v2):
        
        length = math.sqrt((v2[0] - v1[0]) ** 2 + (v2[1] - v1[1])** 2)
        rOut = v2[2] + v1[2]
        rIn = abs(v2[2]- v1[2])
        # 1 두 원이 떨어져있을 때
        if length > rOut:
            return 0
        # 2 두 원이 외접할 때
        if length == rOut:
            return 1
        # 3 두 원이 포개져 있을 때
        if length < rOut:
            # 6 두 원이 같은 원일 때
            if v1[0] == v2[0] and v1[1] == v2[1] and  v1[2] == v2[2]:
                return -1
            # 3 두원이 두 점에서 만날 때
            if length > rIn:
                return 2
            # 4 두 원이 내접할 때
            if length == rIn:
                return 1
            # 5 한 원이 다른 원을 포함할 때
            if length < rIn:
                return 0

    print(getCount(jo,baek))