Programming/[BAEKJOON] acmicpc

1002번 터렛 풀이

fkillrra 2017. 12. 30. 18:11

이 문제를 풀기 위해 꼬박 하루가 걸렸네요.


풀이를 한 후 맞으면 성취감이 너무 크네욯ㅎㅎㅎ


문제는 이러합니다.



문제 풀이를 위해 r을 반지름으로 생각하시면 문제에 대한 이해는 가능합니다.


좌표를 그려보고 원의 접점을 확인해보고, 접점이 어떻게해야 나오는지(두 점 사이의 거리와 반지름의 관계)를 파악한다면 코딩은 쉽습니다.


바로 풀이한 소스를 공개합니다.


[답안]


#include <stdio.h>

#include <math.h>


int func(int x1, int y1, int r1, int x2, int y2, int r2);

int main(void)

{

int input;

int i;

int x1,y1,r1,x2,y2,r2;

scanf("%d",&input);

int result[input];

for(i = 0; i < input; i++)

{

scanf("%d %d %d %d %d %d",&x1,&y1,&r1,&x2,&y2,&r2);

result[i]  = func(x1,y1,r1,x2,y2,r2);

}

for(i = 0; i < input; i++)

{

printf("%d\n",result[i]);

}

return 0;

}

int func(int x1, int y1, int r1, int x2, int y2, int r2)

{

int result = 0;

double c;

c = sqrt((pow(x1-x2,2.0)) + (pow(y1-y2,2.0)));

if(x1 == x2 && y1 == y2)

{

if(r1 == r2)

result = -1;

else

result = 0;

}

else

{

if((c < (r1+r2)) && c > abs(r1-r2))

result = 2;

else if(c == (r1+r2) || c == abs(r1-r2))

result = 1;

else

result = 0;

}

return result;

}


math.h 라이브러리를 이용하면 더욱 쉽게 풀 수 있습니다.


음.. 생각해보니 함수화는 굳이 안해줘도 될것같네요. ㅎㅎ



몇번을 시도한 끝에 성공~!


질문은 댓글 달아주세용~!

반응형