728x90
반응형
1. 문제 설명
2. 풀이과정
해당 문제는 규현이과 승환이의 위치를 기준으로 재명이가 있을 수 있는 위치를 원으로 계산하여 각 그려진 두 원의 상관관계를 비교해 보면 해결할 수 있다.
두 원이 정확하게 일치할 경우, 1점이 겹치는 경우, 2점이 겹치는 경우, 아예 겹치지 않는 경우로 나눌 수 있다.
- sys.stdin.readline() 함수를 사용하기 위해 sys 모듈을 불러온다. 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)
- 만약 규현이과 승환이의 거리가 0이고 각 재명이까지 거리가 동일하면 재명이가 있을 수 있는 두 원은 완벽하게 일치하게 된다. if (d == 0) and (r1 == r2): print(-1)
- 만약 거리가 각 재명이까지 거리 합과 동일하거나 재명이까지 거리 차(절댓값)와 동일하면 두 원은 1개의 점에서 겹친다. elif (d == (r1 + r2)) or (d == abs(r1 - r2)): print(1)
- 만약 거리가 각 재명이까지 거리 차(절댓값) 보다 크고 재명이까지 거리 합보다 작으면 두 원은 2개의 점에서 겹친다. elif (abs(r1 - r2) < d < (r1 + r2)): print(2)
- 그 외의 나머지 경우에는 두 원이 아예 겹치지 않는다. 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
반응형
'백준' 카테고리의 다른 글
[백준] 9461번 : 파도반 수열 - 파이썬(Python) - 우당탕탕 개발자 되기 프로젝트 (0) | 2023.08.13 |
---|---|
[백준] 1158번 : 요세푸스 문제 - 파이썬(Python) - 우당탕탕 개발자 되기 프로젝트 (0) | 2023.08.12 |
[백준] 11721번 : 열 개씩 끊어 출력하기 - 파이썬(Python) - 우당탕탕 개발자 되기 프로젝트 (0) | 2023.08.11 |
[백준] 10866번 : 덱 - 파이썬(Python) - 우당탕탕 개발자 되기 프로젝트 (0) | 2023.08.10 |
[백준] 1912번 : 연속합 - 파이썬(Python) - 우당탕탕 개발자 되기 프로젝트 (0) | 2023.08.08 |
[백준] 15650번 : N과 M (2) - 파이썬(Python) - 우당탕탕 개발자 되기 프로젝트 (0) | 2023.08.07 |
[백준] 1924번 : 2007년 - 파이썬(Python) - 우당탕탕 개발자 되기 프로젝트 (0) | 2023.08.06 |
[백준] 1932번 : 정수 삼각형 - 파이썬(Python) - 우당탕탕 개발자 되기 프로젝트 (0) | 2023.08.05 |