[백준] 1002번 터렛

거북이·2023년 3월 11일
0

백준[실버3]

목록 보기
56/92
post-thumbnail

💡문제접근

  • 처음에 좌표(x1, y1)와 좌표(x2, y2) 사이의 거리 distance를 구할 때 math.sqrt()를 사용한 다음에 int()를 사용해서 정수형으로 변환했는데 이 방법이 문제가 되었다. R을 int단위로 버림하는 순간 더 이상 거리의 개념으로 볼 수 없기 때문이다.
  • 기하학에 관련된 문제로 여러 가지 경우에 대한 답을 미리 정해놓고 구했다.
    ①. 두 원이 외접하는 경우 : 접점이 1개 생기므로 1을 출력
    ②. 두 원이 내접하는 경우 : 접점이 1개 생기므로 1을 출력
    ③. 두 원의 중심 사이의 거리가 0이고 두 원의 반지름이 같은 경우(즉, 동심원의 경우) : 접점은 무한개가 생기므로 -1을 출력
    ④. 두 원이 접하지 않고 서로 떨어져 있는 경우 : 접점이 생기지 않으므로 0을 출력
    ⑤. 한 원이 다른 원의 내부에 있지만 큰 원과 접하지 않은 경우 : 접점이 생기지 않으므로 0을 출력
    ⑥. 위의 5가지 경우를 제외하면 나머지 경우 2를 출력

💡코드(메모리 : 33376KB, 시간 : 40ms)

import sys
import math
input = sys.stdin.readline

T = int(input())
for _ in range(T):
    x1, y1, r1, x2, y2, r2 = map(int, input().strip().split())
    distance = math.sqrt((x1-x2)**2 + (y1-y2)**2)
    # 6번의 경우
    if abs(r1-r2) < distance < abs(r1+r2):
        print(2)
    # 3번의 경우
    elif distance == 0 and r1 == r2:
        print(-1)
    # 1번의 경우
    elif distance == r1 + r2:
        print(1)
    # 2번의 경우
    elif distance == abs(r1 - r2):
        print(1)
    # 나머지 경우
    else:
        print(0)

💡소요시간 : 17m

0개의 댓글