2026.03.17 화

권순찬·2026년 3월 17일

천천히 꾸준히

목록 보기
15/50

오늘 푼 문제

터렛_1002

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개씩 맞닿는 애들 먼저 구하려고 했다가, 방식을 바꿨다. 그냥 거리로 보기보단 원으로 생각하고 접근하면 좀 더 풀기 편한 문제!

profile
아직 많이 서툰 개발자

0개의 댓글