링크🔗
https://www.acmicpc.net/problem/1002
🗒️파이썬 코드 풀이
import math
N = int(input())
for _ in range(N) :
x1, y1, r1, x2, y2, r2 = list(map(int, input().split()))
d = math.sqrt((x1-x2)**2 + (y1-y2)**2) # 두 원의 거리
if d==0 and r1==r2: print(-1)
elif abs(r1-r2)==d or r1+r2==d: print(1) # 내접 또는 외접
elif abs(r1-r2)<d<(r1+r2): print(2)
else: print(0)
1. d = 0, r1=r2 인 경우에 겹치는 점(마린)이 있을 수 있는 경우의 수는 무한
2. 내접 또는 외접인 경우
3. 두 원에서 두 점이 만나는 경우
4. 그 이외의 경우
📌 문제 코멘트
![](https://blog.kakaocdn.net/dn/cstodQ/btsIa7Dx8J8/1vXYxSojpzZntFLwXktA40/img.png)
문제 알고리즘이 어려운 것은 아니다.
우선 원을 통해 풀 수 있다고 생각하고, 또한 원에 대한 성질을 이해해야만 풀 수 있다.
예전에 배운거라 기억도 잘 안나고 헤매었던 문제이다.
r - r' = d (내접) / r + r' = d (외접)
-> 이 두개를 기분으로 이외의 상황을 유추하면 편하다.
📚문제
조규현과 백승환은 터렛에 근무하는 직원이다. 하지만 워낙 존재감이 없어서 인구수는 차지하지 않는다. 다음은 조규현과 백승환의 사진이다.
![](https://blog.kakaocdn.net/dn/Tq4bg/btsIdFLMBmG/IUYdyJaEfAMyVcAwxQGDO1/img.jpg)
이석원은 조규현과 백승환에게 상대편 마린(류재명)의 위치를 계산하라는 명령을 내렸다. 조규현과 백승환은 각각 자신의 터렛 위치에서 현재 적까지의 거리를 계산했다.
조규현의 좌표 (𝑥1,𝑦1) 와 백승환의 좌표 (𝑥2,𝑦2) 가 주어지고, 조규현이 계산한 류재명과의 거리 𝑟1 과 백승환이 계산한 류재명과의 거리 𝑟2 가 주어졌을 때, 류재명이 있을 수 있는 좌표의 수를 출력하는 프로그램을 작성하시오.
입력
첫째 줄에 테스트 케이스의 개수 𝑇 가 주어진다. 각 테스트 케이스는 다음과 같이 이루어져 있다.
한 줄에 공백으로 구분 된 여섯 정수 𝑥1 , 𝑦1 , 𝑟1 , 𝑥2 , 𝑦2 , 𝑟2 가 주어진다.
출력
각 테스트 케이스마다 류재명이 있을 수 있는 위치의 수를 출력한다. 만약 류재명이 있을 수 있는 위치의 개수가 무한대일 경우에는 −1 출력한다.
제한
- −10000≤𝑥1,𝑦1,𝑥2,𝑦2≤10000
- 1≤𝑟1,𝑟2≤10000
예제 입력 1
3
0 0 13 40 0 37
0 0 3 0 7 4
1 1 1 1 1 5
예제 출력 1
2
1
0
'♟️ 알고리즘 > 알고리즘_백준' 카테고리의 다른 글
[Python][백준] 1157. 단어 공부 (0) | 2024.07.02 |
---|---|
[Python][백준] 10431. 줄세우기 (0) | 2024.07.01 |
[Python][백준] 1157. 단어 공부 (0) | 2024.07.01 |
[Python][백준] 2292. 벌집 (1) | 2024.07.01 |
[Python][백준] 23971. ZOAC 4 (0) | 2024.06.27 |