프로그래밍 공부/백준 문제풀기

백준 연습문제 1002번 풀이

sh1256 2021. 12. 6. 17:11
728x90

이름이 많네요^^

네 우선 문제를 정리해 봅시다. 

조규현=A, 백승환=B, 류재명=C

A의 좌표: x1, y1, B의 좌표: x2, y2

AC거리: r1, BC거리: r2

 

그럼 간단히 생각을 해 보면 A, B각각의 점에서 r1, r2의 길이만큼 원을 그렸을 때 겹치는 부분이 C가 있을 수 있는 수가 되겠네요

초 경우의 수는 6가지가 됩니다. 

아래 슬라이드쇼를 봐 주세요!(옆으로 넘어갑니다.)

012345
경우의 수 6가지

자 그럼 위의 경우에 맞게 코드를 짜 봅시다.

#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>
#include <math.h>
double distance(double x1, double y1, double x2, double y2) {
	double x = fabs(x1 - x2);
	double y = fabs(y1 - y2);
	double result = sqrt((x * x) + (y * y));
	return result;
}

int main() {
	int testnum;
	double A[3] = { 0, 0, 0 };
	double B[3] = { 0, 0, 0 };
	scanf("%d", &testnum);
	for (int i = 0; i < testnum; i++) {
		for (int j = 0; j < 3; j++) {
			scanf("%lf", &A[j]);
		}
		for (int j = 0; j < 3; j++) {
			scanf("%lf", &B[j]);
		}
		//printf("A: %lf %lf %lf\n", A[0], A[1], A[2]);
		//printf("B: %lf %lf %lf\n", B[0], B[1], B[2]);

		double d = distance(A[0], A[1], B[0], B[1]);
		//printf("distance(A-B): %lf\n", d);

		if((A[0]==B[0])&& A[1] == B[1]&& A[2] == B[2])
			printf("-1\n");
		else if ((d > A[2] + B[2]) || (d < fabs(A[2] - B[2])))
			printf("0\n");
		else if ((d == A[2] + B[2] )|| (d == fabs(A[2] - B[2])))
			printf("1\n");
		else if (d < A[2] + B[2])
			printf("2\n");

	}
	return 0;
}

 성공