-
728x90
https://www.acmicpc.net/problem/1002
1002번: 터렛
각 테스트 케이스마다 류재명이 있을 수 있는 위치의 수를 출력한다. 만약 류재명이 있을 수 있는 위치의 개수가 무한대일 경우에는 -1을 출력한다.
www.acmicpc.net
문제요약
- 레이더의 두 점의 좌표와 좌표로부터 멀어질 수 있는 거리가 주어짐
- 두 레이더가 만나는지 여부를 파악하는 문제
- 두점에서만나면 2, 한 점에서 만나면 1, 만나지 않으면 0, 모든 거리에서 만나면, -1 을 출력
두 원의 접점을 구하는 문제
경우의 수를 나누는 것이 핵심
1 - x : 주 중심의 거리(피타고라스)와 반지름들의 합 과의 비교
2 - x : 두 중심의 거리(|a - b|)와 반지금들의 합과의 비교import java.util.Scanner; public class Main { public static void main(String[] args) { Scanner sc = new Scanner(System.in); int rows = sc.nextInt(); for (int i = 0; i < rows; i++) { int x1 = sc.nextInt(); int y1 = sc.nextInt(); int r1 = sc.nextInt(); int x2 = sc.nextInt(); int y2 = sc.nextInt(); int r2 = sc.nextInt(); double distance = ((Math.sqrt((x1 - x2) * (x1 - x2) + (y1 - y2) * (y1 - y2))) * 10.0) / 10; double tot = r1 + r2; // 좌표가 동일 if ((x1 == x2) && (y1 == y2)) { // 반지름이 같은 경우, if (r1 == r2) System.out.println(-1); else System.out.println(0); } else { // 거리 == 반지름합 if (distance == tot) System.out.println(1); else if (distance > tot) System.out.println(0); else { if(Math.abs(r1 - r2) == distance) System.out.println(1); else if(Math.abs(r1 - r2) < distance) System.out.println(2); else System.out.println(0); } } } } }
느낀점
예전 수학문제 푸는 것과 비슷해서 재밌었다.
하지만 손으로 푸는 것이 아니라 이를 코드로 구현해야 하기 때문에,
그 부분에서 시간이 좀 소요되었다.
중고등학교 수학문제 푼것 같아 재밌었다.
'알고리즘' 카테고리의 다른 글
18258 - 큐2 (0) 2023.05.24 10773 - 제로 (0) 2023.05.24 1011 - Fly me to the Alpha Centauri (0) 2023.05.24 1110 - 더하기 사이클 (2) 2023.05.24 1929 - 소수 구하기 (0) 2023.05.24