본문 바로가기
Algorithm/Baekjoon For.Java

1002 : 터렛

by Jinny zinny 2023. 3. 5.

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

 

1002번: 터렛

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

www.acmicpc.net

이번엔 터렛 문제다

터렛 문제의 문제 해결 방식 자체는 쉽다.

두개의 좌표가 주어지고 다른 하나의 좌표의 거리가 주어질 때, 이때 총 3가지의 경우의 수가 주어진다.

1.두 좌표의 거리보다 계산한 거리의 합이 작을 때 : 0

2.두 좌표의 거리보다 계산한 거리의 합이 같을 때 : 1

3.두 좌표의 거리보다 계산한 거리의 합이 클 때 : 2

 

 

원을 그렸다고 생각해볼까?

두 좌표에서 그린 원이 두 좌표의 거리보다 작으면 0, 같으면 1, 크면 2가 나온다고 생각하면 된다

import java.util.*;
import java.math.*;
public class Main {
	private int T;
	private int x1;
	private int y1;
	private int x2;
	private int y2;
	private int r1;
	private int r2;
	
	private int distance;
	
	public int dist()
	{
		if(x1==x2&&y1==y2&&r1==r2)
		{
			distance=-1;
		}
		else if(Math.abs(r2-r1)==Math.sqrt(Math.pow(x2-x1, 2)+Math.pow(y2-y1, 2))||Math.abs(r2+r1)==Math.sqrt(Math.pow(x2-x1, 2)+Math.pow(y2-y1, 2)))
		{
			distance=1;
		}
		
		else if(Math.abs(r2+r1)<Math.sqrt(Math.pow(x2-x1, 2)+Math.pow(y2-y1, 2))||Math.abs(r2-r1)>Math.sqrt(Math.pow(x2-x1, 2)+Math.pow(y2-y1, 2)))
		{
			distance=0;
		}
		else if(Math.abs(r2+r1)>Math.sqrt(Math.pow(x2-x1, 2)+Math.pow(y2-y1, 2)))
		{
			distance=2;
		}
		return distance;
		
	}

	public static void main(String[] args) {
		// TODO Auto-generated method stub
		Scanner sc=new Scanner(System.in);
		
		int T=sc.nextInt();
		int array[]=new int[T];
		
		for(int i=0;i<T;i++)
		{
			Main turret=new Main();
			
			turret.x1=sc.nextInt();
			turret.y1=sc.nextInt();
			turret.r1=sc.nextInt();
			turret.x2=sc.nextInt();
			turret.y2=sc.nextInt();
			turret.r2=sc.nextInt();
			
			array[i]=turret.dist();
		}
		for(int i=0;i<T;i++)
		{
			System.out.println(array[i]);
		}
				
	}

}
반응형

'Algorithm > Baekjoon For.Java' 카테고리의 다른 글

15829 : Hashing  (0) 2023.03.06
3273 : 두 수의 합  (0) 2023.03.06
2941 : 크로아티아 알파벳  (0) 2023.03.05
1181 : 단어 정렬  (0) 2023.03.05
1003 : 피보나치  (0) 2023.03.05