본문 바로가기
백준

[백준] 1002번 : 터렛 - 파이썬(Python) - 우당탕탕 개발자 되기 프로젝트

by 우당탕탕 개발자 2023. 8. 9.
728x90
반응형

 

 

1002번: 터렛

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

www.acmicpc.net

 

1. 문제 설명

2. 풀이과정

해당 문제는 규현이과 승환이의 위치를 기준으로 재명이가 있을 수 있는 위치를 원으로 계산하여 각 그려진 두 원의 상관관계를 비교해 보면 해결할 수 있다.

두 원이 정확하게 일치할 경우, 1점이 겹치는 경우, 2점이 겹치는 경우, 아예 겹치지 않는 경우로 나눌 수 있다.

 

  1. sys.stdin.readline() 함수를 사용하기 위해 sys 모듈을 불러온다. import sys
  2. 전체 테스트 케이스 개수를 입력받는다. T = int(sys.stdin.readline())
  3. 테스트 케이스 개수만큼 반복하며 for _ in range(T)
  4. 좌표와 거리를 입력받는다. x1, y1, r1, x2, y2, r2 = map(int, sys.stdin.readline().split())
  5. 규현이와 승환이의 거리를 구한다. d = ((x1 - x2) ** 2 + (y1 - y2) ** 2) ** (1/2)
  6. 만약 규현이과 승환이의 거리가 0이고 각 재명이까지 거리가 동일하면 재명이가 있을 수 있는 두 원은 완벽하게 일치하게 된다. if (d == 0) and (r1 == r2): print(-1)
  7. 만약 거리가 각 재명이까지 거리 합과 동일하거나 재명이까지 거리 차(절댓값)와 동일하면 두 원은 1개의 점에서 겹친다. elif (d == (r1 + r2)) or (d == abs(r1 - r2)): print(1)
  8. 만약 거리가 각 재명이까지 거리 차(절댓값) 보다 크고 재명이까지 거리 합보다 작으면 두 원은 2개의 점에서 겹친다. elif (abs(r1 - r2) < d < (r1 + r2)): print(2)
  9. 그 외의 나머지 경우에는 두 원이 아예 겹치지 않는다. else: print(0)
반응형

3. 소스코드

import sys

T = int(sys.stdin.readline())
for _ in range(T):
    x1, y1, r1, x2, y2, r2 = map(int, sys.stdin.readline().split())

    d = ((x1 - x2) ** 2 + (y1 - y2) ** 2) ** (1/2)

    if (d == 0) and (r1 == r2):
        print(-1)
    elif (d == (r1 + r2)) or (d == abs(r1 - r2)):
        print(1)
    elif (abs(r1 - r2) < d < (r1 + r2)):
        print(2)
    else:
        print(0)
728x90
반응형