728x90
![](https://blog.kakaocdn.net/dn/4Pduf/btrVjPCy1Ma/42e6UjpWiGfbIu0I7edqfk/img.png)
처음에 엄청 삽질을 했다. 공식으로 접근을 하려고 했고 그 사투의 흔적이
![](https://blog.kakaocdn.net/dn/exaJQk/btrVkfudruV/YPmXlKWhU0K9OsKgWm5IU0/img.jpg)
여기에 있다
처음에 원이 만나는 경우를 외접만 생각해서 왜 안되지 싶었는데,, 옛날에 수능 준비할 때 맨날 풀었던 외접 내접을 까먹어서 다시 복습을 해봤다.
두 원의 위치 관계는 두점에서 만나거나 아에 안 만나거나 한점에서 접하거나 아에 일치하는 경우 이렇게 나뉜다.
설명의 편의를 위해 두 원의 반지름을 r1 r2 로 적고 두 원의 중심사이 거리를 d라고 하겠다.
원이 두 점에서 만나는 경우: d가 r1 + r2 보다 큰 경우 원은 절대로 만나지 못한다. 0인 조건이 된다. 그리고 d와 작은반지름의 합이 큰반지름보다 작으면 원은 만날수 없기 때문에 이 두개의 조건을 정리하면 d >r1 +r2 && d >큰반지름 -작은반지름 이 된다. 그리고 이 조건을 이용해서 접하는건 당연히 등호 그 어디에도 들지 않는 경우는 만나지 않는 경우로 처리하면된다. 그래서 정답코드는
#include<stdio.h>
int main()
{
int input;
int x1, y1, r1, x2, y2, r2;
int len;
scanf("%d", &input);
for (int i = 0; i < input; i++)
{
scanf("%d %d %d %d %d %d", &x1, &y1, &r1, &x2, &y2, &r2);
len = ((x1 - x2) * (x1 - x2)) + ((y1 - y2) * (y1 - y2));
if ((r1 - r2) * (r1 - r2) < len && len < (r1 + r2) * (r1 + r2))
printf("2\n");
else if (r1 == r2 && x1 == x2 && y1 == y2)
printf("-1\n");
else if ((r1 - r2) * (r1 - r2) == len || len == (r1 + r2) * (r1 + r2))
printf("1\n");
else
printf("0\n");
}
}
이 글은 코딩 꼬꼬마 시절에 푼 문제를 보관한 글로 네이버에 저장해둔 글을 옮긴 글입니다.
혹시나 참고하시는 부분에 이상한 부분이나 질문이 생긴다면 남겨주시면 친절히 답변 드리겠습니다.
728x90
'알고리즘 기초시절' 카테고리의 다른 글
백준 (C언어)백준 2775번 부녀회장문제 재귀 아닌 배열문제 (0) | 2023.01.04 |
---|---|
백준 (C언어)백준 10757번 큰수 A+B문제 리버스 사용 (0) | 2023.01.04 |
백준 (C언어)그리디 알고리즘 단어수학 백준1339번 (0) | 2023.01.04 |
백준 (C언어)백준 1331번 구현 알고리즘 시뮬레이션(나이트) (0) | 2023.01.04 |
백준 (C언어)백준 14503 로봇청소기(구현 시뮬레이션 맵탐색) (2) | 2023.01.04 |