개발 창고/Algorithm
[백준] 1002번 터렛 - JAVA
로이제로
2024. 3. 18. 12:59
반응형
- 문제
- 풀이
문제
https://www.acmicpc.net/problem/1002
1002번: 터렛
각 테스트 케이스마다 류재명이 있을 수 있는 위치의 수를 출력한다. 만약 류재명이 있을 수 있는 위치의 개수가 무한대일 경우에는 $-1$ 출력한다.
www.acmicpc.net
문제 내용은 지적 재산 보호 차원에서 가져오지 않고 풀이만 공유드리도록 하겠습니다.
풀이
제 풀이가 무조건적으로 맞는 것도 최적의 답변도 아니지만, 이런 풀이도 있다는 차원에서 작성해 보며, 좀 더 나은 방법이 있다면 이야기해 주셔도 도움 될 것 같습니다.
풀이에 도움이 될 만한 내접과 외접에 대한 이론을 보시고 오시면 좀 더 도움 될 것 같습니다.
https://mathbang.net/101#gsc.tab=0
두 원의 위치관계, 내접, 외접
위치관계 또 나오네요. 이번에는 두 원의 위치관계에요. 위치관계 마지막이니까 정신 바짝 차리고 따라오세요. 원과 직선의 위치관계, 원의 할선과 접선, 접점에서 했던 것처럼 두 원이 어떤 관
mathbang.net
import java.util.Scanner;
/**
* 백준 문제 1002
* @author royzero
*
*/
public class Main {
public static void main(String[] args){
Scanner in = new Scanner(System.in);
// Step. 반복 횟 수 입력
int count = in.nextInt();
// Step. 반복 횟 수 만큼 처리
for(int i = 0; i < count; i++){
// Step. 입력 값 분할
int x1 = in.nextInt();
int y1 = in.nextInt();
int r1 = in.nextInt();
int x2 = in.nextInt();
int y2 = in.nextInt();
int r2 = in.nextInt();
// Step. 거리 계산
// dist = sqrt((x2 - x1)^2 + (y2 - y1)^2)
double distance = Math.sqrt(Math.pow(x2 - x1, 2) + Math.pow(y2 - y1, 2));
int sum = r1 + r2;
int sub = Math.abs(r1 - r2);
// case 1 - 두 원이 정확히 겹칠 경우
if (distance == 0 && r1 == r2) {
System.out.println(-1);
// case 2 - 두 원이 서로 겹치면서 인접하지 않는 경우
} else if (distance < sub) {
System.out.println(0);
// case 3 - 두 원이 서로 겹치지 않으면서 인접하지 않는 경우
} else if (distance > sum) {
System.out.println(0);
// case 4 - 두 원이 서로 겹치면서 인접하는 경우
} else if (distance == sub) {
System.out.println(1);
// case 5 - 두 원이 서로 겹치지 않으면서 인접하는 경우
} else if (distance == sum) {
System.out.println(1);
// case 6 - 두 원이 서로 겹치면서 인접하지 않는 경우
} else {
System.out.println(2);
}
}
in.close();
}
}
반응형