본문 바로가기
SWE/코테

백준알고리즘 1002

by S나라라2 2016. 8. 4.
반응형










// 첫째 줄에 테스트 케이스의 개수 T가 주어진다.
// 다음 줄에 x1,y1,r1,x2,y2,r2가 주어진다.

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

int get_x(int* x1, int* y1, int* r1, int* x2, int* y2, int* r2) {

 double d = sqrt((*x1 - *x2)*(*x1 - *x2) + (*y1 - *y2)*(*y1 - *y2)); // 중심 거리


※ 여기서 중심거리 d double로 안해주면 계속 오류난다 !!!! ㅠㅠ


 int bigger=0,smaller=0;

 if ( (*r1) < (*r2) ) {
  bigger = *r2;
  smaller = *r1;
 }
 else {
  bigger = *r1;
  smaller = *r2;
 }

 if (d == 0 && smaller == bigger) return -1;  // 원이 같을 때,
 else if (bigger - smaller < d && d < bigger + smaller)  return 2;// 교점 2개
 else if (bigger - smaller == d)  return 1;// 내접
 else if (bigger + smaller == d)  return 1; // 외접
 else if (d < bigger - smaller) return 0;   // 원안에 원이 있을 때
 else if (bigger + smaller < d) return 0;   // 원과 원이 떨어져있을 때
}

int main() {
 
 int num;
 scanf("%d", &num);

 int *x1 = (int *)malloc(sizeof(int)*num);
 int *y1 = (int *)malloc(sizeof(int)*num);
 int *x2 = (int *)malloc(sizeof(int)*num);
 int *y2 = (int *)malloc(sizeof(int)*num);
 int *r1 = (int *)malloc(sizeof(int)*num);
 int *r2 = (int *)malloc(sizeof(int)*num);

 for (int i = 0; i < num; i++) {
  scanf("%d %d %d %d %d %d", x1 + i, y1+i, r1+i, x2+i, y2+i, r2+i);
 }

 for (int i = 0; i < num; i++) {
  printf("%d\n", get_x(x1 + i, y1 + i, r1 + i, x2 + i, y2 + i, r2 + i));
 }

 return 0;
}


반응형