https://www.acmicpc.net/problem/1002
1002번: 터렛
각 테스트 케이스마다 류재명이 있을 수 있는 위치의 수를 출력한다. 만약 류재명이 있을 수 있는 위치의 개수가 무한대일 경우에는 $-1$ 출력한다.
www.acmicpc.net
혼자 힘으로 풀었는가? O
알고리즘 분류
- 수학
- 기하학
- 많은 조건 분기
문제
조규현과 백승환은 터렛에 근무하는 직원이다. 하지만 워낙 존재감이 없어서 인구수는 차지하지 않는다. 다음은 조규현과 백승환의 사진이다.
![](https://blog.kakaocdn.net/dn/bD1sAL/btslRI5wIDp/gLspvUKfPv9PpKrEEhahnK/img.jpg)
이석원은 조규현과 백승환에게 상대편 마린(류재명)의 위치를 계산하라는 명령을 내렸다. 조규현과 백승환은 각각 자신의 터렛 위치에서 현재 적까지의 거리를 계산했다.
조규현의 좌표 ($x_{1},y_{1}$)와 백승환의 좌표 ($x_{2},y_{2}$ 가 주어지고, 조규현이 계산한 류재명과의 거리 $r_{1}$과 백승환이 계산한 류재명과의 거리 $r_{2}$가 주어졌을 때, 류재명이 있을 수 있는 좌표의 수를 출력하는 프로그램을 작성하시오.
입력
첫째 줄에 테스트 케이스의 개수 T가 주어진다. 각 테스트 케이스는 다음과 같이 이루어져 있다.
한 줄에 공백으로 구분 된 여섯 정수 $x_{1},y_{1},r_{1},x_{2},y_{2},r_{2}$가 주어진다.
출력
각 테스트 케이스마다 류재명이 있을 수 있는 위치의 수를 출력한다. 만약 류재명이 있을 수 있는 위치의 개수가 무한대일 경우에는 −1 출력한다.
제한
- −10000≤$x_{1},y_{1},x_{2},y_{2}$≤10000
- 1≤$r_{1},r_{2}$ ≤10000
처음엔 어떻게 풀어야 하나 곰곰히 생각하다가 두 점 사이의 거리를 피타고라스를 통해 구할 수 있다고 생각했다.
import sys
input = sys.stdin.readline
n = int(input())
for _ in range(n):
x1, y1, r1, x2, y2, r2 = map(int, input().split())
if x1==x2 and y1==y2 and r1==r2:
print(-1)
else:
a = abs(x1 - x2)
b = abs(y1 - y2)
c = (a**2 + b**2)**0.5
dist = abs(r1 - r2)
dist2 = abs(r1 + r2)
if dist == c or dist2 == c:
print(1)
elif dist < c < dist2:
print(2)
else:
print(0)
처음엔 dist2를 정의 안하고 풀었다가 고민을 했다.
왜 틀렸습니다가 나오는지...
몇가지 케이스를 찾다가 더하는 방식도 필요하다는 것을 알게 되었다.
'Algorithm > 백준' 카테고리의 다른 글
[Python] 백준 13305번 - 주유소 (0) | 2023.07.04 |
---|---|
[Python] 백준 1021번 - 회전하는 큐 (0) | 2023.06.30 |
[Python] 백준 1904번 - 01타일 (0) | 2023.06.28 |
[Python] 백준 14501번 - 퇴사 (0) | 2023.06.27 |
[Python] 백준 2193번 - 이친수 (0) | 2023.06.26 |
댓글