-
[1002번] 터렛 - Java알고리즘 연습 2021. 11. 19. 22:24
https://www.acmicpc.net/problem/1002
1002번: 터렛
각 테스트 케이스마다 류재명이 있을 수 있는 위치의 수를 출력한다. 만약 류재명이 있을 수 있는 위치의 개수가 무한대일 경우에는 -1을 출력한다.
www.acmicpc.net
1. 배운점
- 원의 수학적 성질을 떠올릴 수 있다면 문제 자체는 어렵지 않다.
- 두 원이 어떻게 위치할 수 있는지 꼼꼼히 경우의 수를 따져보는 것이 핵심
- Math class의 함수를 활용할 수 있다.
2. 개선할 점
3. 궁금한 점
4. 풀이
import java.io.BufferedReader; import java.io.IOException; import java.io.InputStreamReader; import java.util.StringTokenizer; public class Main { public static void main(String[] args) throws NumberFormatException, IOException { // import java.io.BufferedReader BufferedReader br = new BufferedReader(new InputStreamReader(System.in)); // 테스트케이스 입력받기 int cases = Integer.parseInt(br.readLine()); // 테스트 케이스만큼 위치 개수 계산하기 for(int i = 0; i < cases; i++) { // import java.util.StringTokenizer StringTokenizer st = new StringTokenizer(br.readLine(), " "); int x1 = Integer.parseInt(st.nextToken()); int y1 = Integer.parseInt(st.nextToken()); int r1 = Integer.parseInt(st.nextToken()); int x2 = Integer.parseInt(st.nextToken()); int y2 = Integer.parseInt(st.nextToken()); int r2 = Integer.parseInt(st.nextToken()); // 원과 원 사이의 거리 int distance = (int)(Math.pow(x1 - x2, 2) + Math.pow(y1 - y2, 2)); // 1. 접점의 개수가 무한일 때 if(x1 == x2 && y1 == y2 && r1 == r2) { System.out.println(-1); } // 2.접점이 0개인 경우 // 2-1. : 원이 접하지 않는 포함관계인 경우 else if(distance < Math.pow(r1-r2, 2)) { System.out.println(0); } // 2-2. : 두 점 사이의 거리가 반지름의 갑보다 클 때 else if(distance > Math.pow(r1 + r2, 2)) { System.out.println(0); } // 3. 접점이 1개인 경우 // 3-1. 두 원점 사이의 거리가 두 원 반지름 길이 차이와 같을 때 else if(distance == Math.pow(r1-r2, 2)) { System.out.println(1); } // 3-2. 두 원이 한 점에서 외접할 때 else if(distance == Math.pow(r1 + r2, 2)) { System.out.println(1); } // 접점이 2개인 경우 else { System.out.println(2); } } } }
'알고리즘 연습' 카테고리의 다른 글
[7586번] 덩치 - Java (0) 2021.11.22 [2750번] 수 정렬하기 -Java (0) 2021.11.19 [2231번] 분해합 - Java (0) 2021.11.18 [4948번] 베르트랑 공준 - Java (0) 2021.11.17 [9020번] 골드바흐의 추측 - Java (0) 2021.11.17