티스토리 뷰

알고리즘/백준

[백준] 1002. 터렛

빙빙 2021. 4. 4. 16:48

그림을 그려보면 두 원이 만나는 점의 개수를 출력하면 된다.

무한대라는 말은 같은 원일 때를 의미하는 것이다.

이 문제를 풀기 위해서 두 원이 만날 수 있는 경우를 찾아봤다.

그 결과 6가지가 나왔다.

dis를 두 원점 사이의 거리로 두었다.

1. 동심원일 때는 두 원이 완전히 같을 때와 한 원이 다른 원 안에 들어 갈 때를 생각해 줘야한다.

2. 두점에서 만날 때abs(r1-r2) < dis < r1+r2

3. 한 점에서 만날 때는 두가지 경우. 외접할 때 r1+r2 == dis, 내접할 때 abs(r1-r2) == dis

4. 두 원이 만나지 않을 때는 두가지 경우이다. 외부에 있을 때 r1+r2 < dis, 내부에 있을 때abs(r1-r2) > dis

문제를 풀때 if문이 두개가 걸리는 경우가 있어서 continue로 처리해 줬다.


 

T = int(input())
for tc in range(1, T+1):
    x1, y1, r1, x2, y2, r2 = map(int, input().split())
    dis = 0
    dis = (abs(x1-x2)**2 + abs(y1-y2)**2)**0.5
    # print(dis)
    if x1 == x2 and y1 == y2:
        if r1 != r2: #동심원
            # print("check4")
            print(0)
            continue
        elif r1 == r2: #동일할 때
            # print("check5")
            print(-1)
            continue
    if abs(r1-r2) < dis < r1+r2: #두점
        # print("check1")
        print(2)
        continue
    if r1+r2 == dis or abs(r1-r2) == dis: #외접, 내접
        # print("check2")
        print(1)
        continue
    if r1+r2 < dis or abs(r1-r2) > dis: # 외부에 있을 때, 내부에 있을 때
        #print("check3")
        print(0)
        continue

 

'알고리즘 > 백준' 카테고리의 다른 글

[백준] 9372. 상근이의 여행  (0) 2021.04.10
[백준] 1764. 듣보잡  (0) 2021.04.06
[백준] 1475. 방 번호  (0) 2021.04.03
[백준] 9375. 패션왕 신해빈  (0) 2021.04.01
[백준] 1969. DNA  (0) 2021.04.01
댓글
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
«   2024/12   »
1 2 3 4 5 6 7
8 9 10 11 12 13 14
15 16 17 18 19 20 21
22 23 24 25 26 27 28
29 30 31
글 보관함