Programming/Python

[백준/python3] 1002. 터렛

728x90

📢 문제 설명


문제를 요약하자면 두 개의 원의 중점의 좌표와 반지름의 길이를 입력하고, 두 개의 원의 접점의 개수를 출력하면 된다.

만약 접점이 무한개(= 중점의 좌표 동일 & 반지름 길이 동일)인 경우 -1을 출력한다.


✏️ 코드 풀이


def turret():
    x1, y1, r1, x2, y2, r2 = map(int, input().split())
    d = (pow(x1-x2,2)+pow(y1-y2,2))**(1/2)
    r_list = [r1, r2, d]
    m = max(r_list)
    r_list.remove(m)
    if r1==r2 and d == 0:
        print(-1)
    elif m < sum(r_list):
        print(2)
    elif m == sum(r_list):
        print(1)
    else:
        print(0)

T = int(input())

for x in range(T):
    turret()
  1. 각 거리들을 리스트(r_list)로 저장한다.
        d = (pow(x1-x2,2)+pow(y1-y2,2))**(1/2)
        r_list = [r1, r2, d]​
     변수 d는 각 원의 중심의 거리를 구한 값이다. 
    - pow 함수를 사용해 각 x, ,y 좌표 사이의 거리의 제곱값을 구했지만, 이외에도 (x1-x2)**2도 가능하다.
    문제를 풀 때는 삼각형 세 변의 길이에 대한 특징을 활용해야 하므로 세 길이(반지름과 중점 사이 거리)를 r_list에 저장한다.
  2. 최대 길이를 구한다.
        m = max(r_list)
        r_list.remove(m)​
    max 함수를 사용해 r_list의 최대값을 구한다. 다시 말해, 세 변의 길이 중 가장 긴 변의 길이를 변수 m에 저장한다.
    이를 구분하기 위해 최대값은 리스트에서 제거한다.
  3. 삼각형의 세 변의 길이에 대한 특징을 활용해 접점의 개수를 구분한다.

 

성공!

SMALL