728x90
https://www.acmicpc.net/problem/1002
1002번: 터렛
각 테스트 케이스마다 류재명이 있을 수 있는 위치의 수를 출력한다. 만약 류재명이 있을 수 있는 위치의 개수가 무한대일 경우에는 -1을 출력한다.
www.acmicpc.net
문제 분석
조규현의 좌표와 백승환의 좌표를 원점으로 하고 각각 반지름 r1, r2를 가지는 원을 그려 두 원의 교점을 구하는 문제이다.
출력 분석
- 두 원이 완벽하게 일치하는 경우 : -1
- 두 원이 접하는 부분이 없는 경우 : 0
- 두 원이 한 점에서 접하는 경우 : 1
- 두 원이 겹쳐져 두 점이 접하는 경우 : 2
코드 진행 방향
두 원의 원점 사이의 거리를 구한 뒤 각 원의 반지름과의 관계를 비교한다.
d : 두 원의 원점 사이의 거리
- d = 0 이며 r1 = r2 일 경우 완전히 일치하는 원이다. => -1 출력
- |r1-r2| < d < r1+r2 일 경우 접점이 두 개이다. => 2 출력
- d = |r1-r2| 또는 d = |r1+r2| 일 경우 접점이 한 개이다. => 1 출력
- 나머지의 경우 접점이 없다. => 0 출력
코드
더보기
#include <stdio.h>
#include <stdlib.h>
#include <math.h>
int main(){
int num;
scanf("%d", &num);
while(num--){
int x1, y1, r1, x2, y2, r2;
scanf("%d %d %d %d %d %d", &x1, &y1, &r1, &x2, &y2, &r2);
double d=sqrt(pow((x1-x2),2)+pow((y1-y2),2));
if(d==0 && r1==r2){
printf("-1\n");
}else if(abs(r1-r2)<d && d<abs(r1+r2)){
printf("2\n");
}else if(abs(r1-r2)==d || abs(r1+r2)==d){
printf("1\n");
}else{
printf("0\n");
}
}
}
728x90
'알고리즘 > 백준' 카테고리의 다른 글
[백준/C] 1008번: A/B (0) | 2022.06.12 |
---|---|
[백준/C] 1004번: 어린 왕자 (0) | 2022.06.11 |
[백준/C] 1003번: 피보나치 함수 (0) | 2022.06.11 |
[백준/C] 1001번: A-B (0) | 2022.06.11 |
[백준/C] 1000번: A+B (0) | 2022.06.11 |