ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • [BOJ] 1002번
    Algorithm/Baekjoon Online Judge 2022. 3. 16. 17:29

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

     

    1002번: 터렛

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

    www.acmicpc.net

     

    Python3

    import math
    if __name__ == '__main__':
        n = int(input())
        for _ in range(n):
            x1, y1, r1, x2, y2, r2 = map(int, input().split())
            distance = math.sqrt((x1 - x2) ** 2 + (y1 - y2) ** 2)
    
            if distance == 0 and r1 == r2:
                print(-1)
            elif abs(r1 - r2) == distance or r1 + r2 == distance:
                print(1)
            elif abs(r1 - r2) < distance < (r1 + r2):
                print(2)
            else:
                print(0)

    두 좌표와 거리가 주어질 때 이를 다시 생각하면 두 원의 좌표와 반지름이 주어질 때 이 두 원이 몇개의 점에서 만나는지 구하는 문제이다. 따라서 원의 중심 좌표 2개를 받았을 때 이 두 원사이의 거리를 구하는 공식이 필요하다. 

    원의 방정식 <출처: 네이버 지식백과>

    다음과 같이 두 원 사이의 거리를 구할 수 있다. 이 거리와 두 원의 위치를 이용해 원의 접점의 개수를 구한다.

    1. 두원이 동심원이고 반지름이 같을 때 = 접점의 개수가 무한대

    2. 내접 또는 외접일 때 = 접점이 1개

    3. 두 원이 서로 다른 두 점에서 만날 때 = 접점이 2개

    4. 이외의 경우 = 접점이 0개

    이 경우에 대해 코드를 작성한다.

     

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

    1번의 경우 동심원이기 때문에 distance가 0이고 두 반지름이 같은 조건이다.

    2번의 경우 내접일 경우 distance가 두 반지름의 차이랑 같은 조건이다.

    3번의 경우 서로 다른 두점에서 만나기 때문에 반지름의 차이가 distance보다는 크고 반지름의 합보다는 작은 조건이다.

    4번의 경우 이외의 경우에 대한 조건이다.

     

    'Algorithm > Baekjoon Online Judge' 카테고리의 다른 글

    [BOJ] 2798번  (0) 2022.03.21
    [BOJ] 11729번  (0) 2022.03.20
    [BOJ] 3053번  (0) 2022.03.16
    [BOJ] 4153번  (0) 2022.03.16
    [BOJ] 3009번  (0) 2022.03.15

    댓글

Designed by Tistory.