오늘 푼 문제
import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.OutputStreamWriter;
import java.util.StringTokenizer;
public class 터렛_1002 {
public static void main(String[] args) throws IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(System.out));
int t = Integer.parseInt(br.readLine());
for (int i = 0; i < t; i++) {
StringTokenizer st = new StringTokenizer(br.readLine());
int x1 = Integer.parseInt(st.nextToken());
int y1 = Integer.parseInt(st.nextToken());
int r1 = Integer.parseInt(st.nextToken());
int x2 = Integer.parseInt(st.nextToken());
int y2 = Integer.parseInt(st.nextToken());
int r2 = Integer.parseInt(st.nextToken());
int distance = (int) (Math.pow(Math.abs(x2 - x1), 2) + Math.pow(Math.abs(y2 - y1), 2));
int sum = (int) Math.pow(r1 + r2, 2);
int diff = (int) Math.pow(r1 - r2, 2);
if (x1 == x2 && y1 == y2 && r1 == r2) {
bw.write(-1 + "\n");
} else if (distance > sum || distance < diff || distance == 0) {
bw.write(0 + "\n");
} else if (distance == diff || distance == sum) {
bw.write(1 + "\n");
} else {
bw.write(2 + "\n");
}
}
bw.flush();
bw.close();
}
}
와 이거 어렵다.. 괜히 정답률이 낮은게 아니다.. 반례를 생각할게 엄청 많고 놓칠만한게 엄청 많다!
점이 무한대 -> 완벽히 겹치는 원.
접점이 0 -> 원안에 원 or 아예 안 겹치는 원.
접점이 1 -> 외접 or 내접
접점이 2 -> 나머지 전부
처음엔 2개씩 맞닿는 애들 먼저 구하려고 했다가, 방식을 바꿨다. 그냥 거리로 보기보단 원으로 생각하고 접근하면 좀 더 풀기 편한 문제!