반응형

이번에는 터렛 문제를 풀어 보겠습니다.

 

.

.

.

 

.

.

.

 

사실 이문제는 처음에 읽었을 때는 이해가 되지 않았지만 한 번 더 읽어보니

평면 위에서 두 점이 원을 그리고 있는 모습을 상상하면서 풀면 되었었다.

풀기 위해서는 우선 원과원 사이의 거리를 구하는 공식을 알아야 한다.

원과 원차이의 거리 구하는 식

만나는 접접이 두 개일 경우는 원이 내접할 경우와 외접할 경우 이렇게 2가지 가 있습니다.

내접할 경우 -> d = r1 - r2

외접할 경우 -> d = r1 + r2

 

.

.

.

#include <iostream>
#include <stdio.h>
using namespace std;

int main() {
	int n, i;
	int x1, y1, r1, x2, y2, r2;
	int d;	// 점과 점사이의 거리
	int sum;	// r1 + r2 외접할 경우 사용
	int min;	// r1 - r2 내점할 경우 사용
	cin >> n;
	for (i = 0; i < n; i++) {
		cin >> x1 >> y1 >> r1 >> x2 >> y2 >> r2;
		
		d = (x1 - x2) * (x1 - x2) + (y1 - y2) * (y1 - y2);
		sum = (r1 + r2)*(r1+r2);
		min = (r1 - r2)*(r1-r2);

		if (d == 0) {
			if (min == 0) printf("-1\n");
			else printf("0\n");
		}
		else if (d == sum || d == min) {
			printf("1\n");
		}
		else if (min < d && d < sum) {
			printf("2\n");
		}
		else {
			printf("0\n");
		}
	}

	
	return 0;
}

 

.

.

.

 

반응형
  1. 초보 2021.08.30 23:13

    안녕하세요 ㅜㅜ 질문이있는데 두 원사이의 거리는 각 거래에서 빼고 제곱에 루트 씌워줘야하는데
    답 코드 쓰신거엔 루트를 안씌우시고 했는데 왜 저럭헤 했는지 알수잇을까요??

+ Recent posts