본문 바로가기
백준알고리즘/기하 1

(Python/🥈4)백준 알고리즘 1002번: 터렛

by windy7271 2022. 5. 27.
728x90
반응형

문제 출처:https://www.acmicpc.net/problem/1002

 

1002번: 터렛

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

www.acmicpc.net

풀이:

T = int(sys.stdin.readline())
distance = 0    # 대각
for i in range(T):
    x1,y1,r1,x2,y2,r2 = list(map(int,(sys.stdin.readline().split())))

    distance = ((x2 - x1) ** 2 + (y2 - y1) ** 2) ** 0.5      # 점 들 사이의 거리 피타고리스 사용
    a = r1 + r2         #  두 반지름의 합
    b = abs(r1-r2)      #  두 반지름의 차

    if distance == 0:       #두 원의 중심이 같은 경우
        if r1 == r2 :
            print(-1)
        else:
            print(0)
    else:                           # 두 원의 중심이 다른경우
        if distance == a or distance == b:          # 원이 접할때
            print(1)
        elif distance < a and distance > b :        # 두개의 점이 접할때
            print(2)
        else:
            print(0)

 

두 원이 만나는 점을 찾으면된다.

 

distance 가 0 일때는 두 원의 중심 같은 경우이므로 크기가 같으면 무한히 겹치므로 -1

한원이 원 안에 들어가있므녀 겹치는게 없으므로 0

 

두원의 중심이 다를 경우

접점이 한개면  외접이가나 내접이다.

즉 a 와 b의 합이 distance 와 같거나  두개의 차이의 절댓값이 distance와 같을때다

 

 

 

2를 출력하는 경우는 두 점에서 만나는 경우이다.

 

distance는 두 반지름의 합보다는 작고 차이보다는 커야한다.

 

그렇지 않으면 내접이 된다.

 

반응형

댓글