터렛 (백준 1002번)

박영준·2023년 5월 23일
0

코딩테스트

목록 보기
140/300

메모

/*
조규현의 좌표 (x1, y1)
백승환의 좌표 (x2, y2)

조규현이 계산한 류재명과의 거리 r1
백승환이 계산한 류재명과의 거리 r2

류재명이 있을 수 있는 좌표의 수?
*/

해결법

방법 1

import java.util.Scanner;
 
public class Main {
	public static void main(String[] args) {
 
		Scanner in = new Scanner(System.in);
 
		int T = in.nextInt();
 
		while (T-- > 0) {
 
			int x1 = in.nextInt();
			int y1 = in.nextInt();
			int r1 = in.nextInt();
 
			int x2 = in.nextInt();
			int y2 = in.nextInt();
			int r2 = in.nextInt();
			
			System.out.println(tangent_point(x1, y1, r1, x2, y2, r2));
		}
	}
 
	// 접점 개수 구하는 함수
	public static int tangent_point(int x1, int y1, int r1, int x2, int y2, int r2) {
    
		int distance_pow = (int)(Math.pow(x2 - x1, 2) + Math.pow(y2 - y1, 2));	// 좌표에서 두 점 사이의 거리 공식 
 
		if (x1 == x2 && y1 == y2 && r1 == r2) {		// 1. 접점 무한 : 중점(좌표) 동일, 반지름 동일
			return -1;
		} else if (distance_pow > Math.pow(r1 + r2, 2)) {		// 2-1. 접점 X : 두 점 사이 거리 > r1 + r2 
			return 0;
		} else if (distance_pow < Math.pow(r1 - r2, 2)) {		// 2-2. 접점 X : 두 점 사이 거리 < r1 - r2 
			return 0;
		} else if (distance_pow == Math.pow(r1 + r2, 2)) {		// 3-1. 접점 1개 : 두 점 사이 거리 = r1 + r2
			return 1;
		} else if (distance_pow == Math.pow(r1 - r2, 2)) {		// 3-1. 접점 1개 : 두 점 사이 거리 = r1 - r2
			return 1;
		} else {												// 4. 접점 2개 : 두 원이 교차할 경우
			return 2;
		}
	}
}


참고: [백준] 1002번 : 터렛 - JAVA [자바]


터렛 (백준 1002번)

profile
개발자로 거듭나기!

0개의 댓글