본문 바로가기
Algorithm

백준 1002 터렛

by 진득한진드기 2022. 12. 22.

문제

조규현과 백승환은 터렛에 근무하는 직원이다.

이석원은 조규현과 백승환에게 상대편 마린(류재명)의 위치를 계산하라는 명령을 내렸다.

조규현과 백승환은 각각 자신의 터렛 위치에서 현재 적까지의 거리를 계산했다.

조규현의 좌표 (x1, y1)와 백승환의 좌표 (x2, y2)가 주어지고, 조규현이 계산한 류재명과의 거리 r1과 백승환이 계산한 류재명과의 거리 r2가 주어졌을 때,

류재명이 있을 수 있는 좌표의 수를 출력하는 프로그램을 작성하시오.


입력

첫째 줄에 테스트 케이스의 개수 T가 주어진다. 각 테스트 케이스는 다음과 같이 이루어져 있다.

한 줄에 x1, y1, r1, x2, y2, r2가 주어진다. x1, y1, x2, y2는 -10,000보다 크거나 같고, 10,000보다 작거나 같은 정수이고,

r1, r2는 10,000보다 작거나 같은 자연수이다.


출력

각 테스트 케이스마다 류재명이 있을 수 있는 위치의 수를 출력한다.

만약 류재명이 있을 수 있는 위치의 개수가 무한대일 경우에는 -1을 출력한다.


CODE

#include<stdio.h>
#include<math.h>
#include<stdlib.h>

int main()
{
	int num;
	double distance;
	int x1, y1, r1, x2, y2, r2, result;
	scanf("%d", &num);
	while (num--)
	{
		scanf("%d %d %d %d %d %d", &x1, &y1, &r1, &x2, &y2, &r2);
		distance = sqrt(pow(x1 - x2, 2) + pow(y1 - y2, 2)); // 두원의 중심사이의 거리를 구하기
    
    // 이후에 위치 관계에 대하여 결과 출력
		if (distance == 0 && r1 == r2) result = -1;
		else if (abs(r1 - r2) > distance) result = 0;
		else if (r1 + r2 < distance) result = 0;
		else if ((r1 + r2) == distance) result = 1;
		else if (abs(r1 - r2) == distance) result = 1;
		else
			result = 2;
		printf("%d\n", result);
	}

	
	return 0;
}

후기

이 문제는 두 원의 위치관계의 ,외접 , 내접을 표현하는 문제이다.

처음에 직선으로만 생각해서 못풀다가 위치를 그림으로 표현해보니 원으로 나타낼수 있다고 생각하여

외접 내접을 생각할 수 있었다. 이후에 수학참고 블로그에 들어가서 식을 가져왔다.

식을 까먹었어 가지고 혼자 풀어볼려고했는데 결국 구글링했다...

참고 자료 : https://mathbang.net/101

'Algorithm' 카테고리의 다른 글

TIL 1일차  (1) 2023.04.12
백준 15649 N과 M  (1) 2022.12.22
백준 2292 벌집  (0) 2022.11.19
특정 거리의 도시 찾기(백준 18352)  (0) 2022.11.01
[C언어] 중복제거한 배열 출력  (0) 2022.10.21