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 |