본문 바로가기

백준

[백준] 1002번 : 터렛 [Java]

https://www.acmicpc.net/problem/1002

 

1002번: 터렛

각 테스트 케이스마다 류재명이 있을 수 있는 위치의 수를 출력한다. 만약 류재명이 있을 수 있는 위치의 개수가 무한대일 경우에는 -1을 출력한다.

www.acmicpc.net

 


 

● 문제

[백준] 1002번

 

● 접근 방법

조규현위 위치 (x1, y1)와 백승환의 위치 (x2, y2)가 주어지며

r1은 조규현의 위치로 부터 류재명까지의 거리를 나타내며,

r2는 백승환의 위치로 부터 류재명까지의 거리를 나타낸다.

 

이때 류재명이 존재 가능한 위치를 찾는 문제이다.

 

이때, 조규현, 백승환의 위치 정보로 알 수 있는 류재명의 위치의 경우는 다음과 같다.

파란 점 : 조규현 위치

빨간 점 : 백승환 위치

초록 점 : 류재명 존재 가능 위치

교점 2개
교점 1개
무한
교점 0개
교점 0개

 

모든 케이스를 고려하여 주면 끝.

 

 

 

● 문제 풀이

import java.util.Scanner;

public class Main {
	
	static class Turet{
		int x;
		int y;
		int r;
	}
	
	public static void main(String[] args) {
		Turet[] t = {new Turet(), new Turet()}; // t[0] = 조규현, t[1] = 백승환
		double distance, sub;
		int answer, T;
		
		//입력
		Scanner sc = new Scanner(System.in);
		T = sc.nextInt();
		
		
		// 테스트 케이스
		for(int i = 0; i < T; i++) {
			
			//입력
			for(int j = 0; j < t.length; j++) {
				t[j].x = sc.nextInt(); 
				t[j].y = sc.nextInt(); 
				t[j].r = sc.nextInt();
			}
			
			//풀이
			distance = Math.sqrt(Math.pow(t[1].x - t[0].x, 2) + Math.pow(t[1].y - t[0].y, 2)); // 거리 공식 (x2 - x1)^2 + (y2 - y1)^2 = dis^2
			
			sub = t[0].r > t[1].r ? sub = t[0].r - t[1].r : t[1].r - t[0].r;  // 큰 마린 거리 - 작은 마린 거리 = 존재 가능 거리
			
			if (distance == 0 && t[0].r == t[1].r) answer = -1;  // 이 경우 마린 위치 가능 지점이 무한.
			else if(distance < t[0].r + t[1].r && (sub < distance)) answer = 2;  // 교점 2개
			else if(distance == t[0].r + t[1].r || distance == sub) answer = 1; //교접 1개
			else answer = 0;   // 교점 X
			
			
			//출력
			System.out.println(answer);	
		}
	}
	
}

 

'백준' 카테고리의 다른 글

[백준] 1009번 : 분산처리 [Java]  (0) 2022.08.25
[백준] 1008번 : A/B [Java]  (0) 2022.08.25
[백준] 1003번 : 피보나치 함수 [Java]  (0) 2022.08.24
[백준] 1001번 : A-B [Java]  (0) 2022.08.24
[백준] 1000번 : A+B [Java]  (0) 2022.08.24