728x90
반응형
💬 문제 접근
- 2번 테스트케이스를 가지고 좌표체계를 한번 그려본다. 그리게 되면 두 원이 생긴다는 것을 알 수 있다.
- 피타고라스 식을 사용해 두 원의 중심점을 기준으로 원의 접점이 얼마나 생기는지 생각해보며 계산하면 된다.
💡 문제 풀이
int between_distance = (int)Math.sqrt(Math.pow(x1 - x2, 2) + Math.pow(y1 - y2, 2));
- 피타고라스 식을 사용하여 두 점간의 거리를 구해준다.
- double형을 사용해줘도 되지만 그냥 int형으로 형변환을 해줬다.
- 위 사진을 참고하여 1~5번까지의 경우와 그리고 두 원이 겹치는 경우를 포함해 총 6가지의 경우를 생각해보고 풀면 된다.
⭐️ 코드
import java.util.Scanner;
public class BJ_CT_2 {
public static void main(String[] args) {
BJ_CT_2 sol = new BJ_CT_2();
Scanner sc = new Scanner(System.in);
int T = sc.nextInt();
for (int testcase = 0; testcase < T; testcase++) {
// 0 0 13 40 0 37
int x1 = sc.nextInt();
int y1 = sc.nextInt();
int r1 = sc.nextInt();
int x2 = sc.nextInt();
int y2 = sc.nextInt();
int r2 = sc.nextInt();
System.out.println(sol.solution(x1, y1, r1, x2, y2, r2));
}
}
public int solution(int x1, int y1, int r1, int x2, int y2, int r2) {
// 조규현의 좌표 (x1, y1) , 백승환의 좌표 (x2, y2)
// -> (0,0) : 13 / (40,0) : 37
// 조규현이 계산한 류재명과의 거리 r1 -> 13
// 백승현이 계산한 류재명과의 거리 r2 -> 37
int between_distance = (int)Math.sqrt(Math.pow(x1 - x2, 2) + Math.pow(y1 - y2, 2));
// 중심점이 같고 반지름이 같은 경우
if (x1 == x2 && y1 == y2 && r1 == r2) {
return -1;
}
// 중심점간의 거리가 두 원의 반지름 길이의 합보다 클 때
else if (between_distance > Math.pow(r1 + r2, 2)) {
return 0;
}
// 두 원 중 하나가 작고 원 안에서 내접하지 않을 때
else if (between_distance < Math.pow(r1 - r2,2)) {
return 0;
}
// 두 원이 외접할 때
else if (between_distance == Math.pow(r1 + r2, 2)) {
return 1;
}
// 두 원이 내접할 때
else if (between_distance == Math.pow(r1 - r2, 2)) {
return 1;
}
// 중심점간의 거리가 두 원의 반지름 길이의 합보다 작을 때 2개의 접점 생김
else {
return 2;
}
}
}
👀 후기
- 수학적 지식을 사용해 풀기에는 아직 많이 어렵다...
- 막상 알고 나면 쉽지만 항상 생각하기까지의 시간이 많이 걸린다.
- 화이팅이닷!
728x90
반응형
'CodingTest > BOJ' 카테고리의 다른 글
[백준 / 11650번] 좌표 정렬하기 - (Java - TimSort - 정렬) (0) | 2023.02.08 |
---|---|
[백준 / 10989번] 수 정렬하기 3 - (Java - Counting Sort / 개수 정렬) (0) | 2023.02.08 |
[백준 / 17298번] 오큰수 - (Java - Stack) (0) | 2023.01.21 |
[백준 / 11660번] 구간 합 구하기5 - (Java - 누적 합) (0) | 2023.01.09 |
[백준 / 11659번] 구간 합 구하기4 - (Java - 누적 합) (2) | 2023.01.08 |