본문 바로가기
프로그래밍/백준 알고리즘 코드

백준 1002번 자바 터렛 [기본수학2]

by 졸린이 2021. 5. 20.
반응형

 

x1, y1 좌표를 입력하고 류재명과의 거리 r1 마찬가지로 x2, y2, r2를 입력한다.

 

류재명이 있을 수 있는 위치의 개수를 출력하는 프로그램이다.

 

x1, y1 좌표에서 r1을 반지름으로 원을 그리고 x2, y2에서 r2로 원을 그리고 두 원이 만나는 점이 류재명이 있을 수 있는 위치이다.

 

경우의 수를 살펴보면 네 가지가 있다.

두 원이 아예 만나지 않는 경우 (두 점 사이의 거리보다 r1+r2값이 작은경우, r1, r2의 차이가 거리보다 큰 경우)

한 점이 만나는 경우 (r1+r2가 거리랑 일치하는 경우, r1, r2의 차이가 거리랑 같은 경우)

무한대인 경우 (다 같은 값인 경우)

두 점이 만나는 경우 (앞에 조건을 다 넣고 이거는 else로 편하게 ㅎ)

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
import java.util.Scanner;
 
public class Main{
    public static void main(String[] args){
        Scanner sc = new Scanner(System.in);
        int x1, y1, r1, x2, y2, r2;
        int testcase;
        
        double d;
        testcase = sc.nextInt();
 
        for(int i=0; i<testcase; i++) {
            int result;
            
            x1 = sc.nextInt();
            y1 = sc.nextInt();
            r1 = sc.nextInt();
            x2 = sc.nextInt();
            y2 = sc.nextInt();
            r2 = sc.nextInt();
            //두 점의 길이
            d = Math.sqrt(Math.pow((x1-x2), 2+ Math.pow((y1-y2), 2));
            
 
            //원이 겹쳐서 무한인 경우 Math.abs()절대값 함수
            if(x1 ==x2 && y1 == y2 && r1 == r2) {
                result = -1;
            }
            else if(d == r1+r2 || Math.abs(r1-r2) == d  ) { //Math.abs(r1-r2) == d
                result = 1;
            }
            else if(Math.abs(r1-r2) > d || x1 ==x2 && y1 == y2 && r1 != r2 || d > r1+r2 ) {
                result = 0;
            }
            else {
                result = 2;
            }
            System.out.println(result);
        }
    }
}
cs

반응형

댓글