알고리즘/백준

[백준/C] 1002번: 터렛

이우열 2022. 6. 11. 18:33
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