https://www.acmicpc.net/problem/1004
접근 :
- 테스트 케이스 갯수 T를 받는다. (코드에서는 n으로 구현)
- 출발점과 도착점을 받는다.
- 행성수 n을 입력 받는다. (코드에서는 planet_num 으로 구현)
- 출발점과 도착점의 좌표가 행성의 원의 방정식에 포함 여부를 확인하여 진입/이탈 횟수를 계산한다.
- 발생할 수 있는 경우의 수는 다음과 같다.
코드 구현 :
import java.io.*;
public class Main {
//행성 객체
static class Planet {
private int x;
private int y;
private int r;
public Planet(int x, int y, int r) {
this.x = x;
this.y = y;
this.r = r;
}
// 중간에 걸쳐진 경우는 존재하지 않음
boolean checkInside(int x, int y) {
return Math.pow((x - this.x), 2) + Math.pow((y - this.y), 2) < Math.pow(this.r, 2);
}
// 행성을 지나는 횟수 카운트
public int CountContactPoint(int start_x, int start_y, int finish_x, int finish_y) {
int result = 1;
if (checkInside(start_x, start_y) && checkInside(finish_x, finish_y)) {
result = 0;
} else if (!checkInside(start_x, start_y) && !checkInside(finish_x, finish_y)) {
result = 0;
}
return result;
}
}
public static void main(String[] args) throws IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
StringBuffer sb = new StringBuffer();
int n = Integer.parseInt(br.readLine());
int planet_num = 0;
String[] inputs;
int start_x, start_y = 0;
int finish_x, finish_y = 0;
Planet[] planet_array;
int result = 0;
// 각각의 변 길이 입력, 가장 큰 사각형의 x, y값 저장
for (int i = 0; i < n; i++) {
// 출발, 도착 지점의 좌표
inputs = br.readLine().split(" ");
result = 0;
start_x = Integer.parseInt(inputs[0]);
start_y = Integer.parseInt(inputs[1]);
finish_x = Integer.parseInt(inputs[2]);
finish_y = Integer.parseInt(inputs[3]);
planet_num = Integer.parseInt(br.readLine());
planet_array = new Planet[planet_num];
for (int j = 0; j < planet_num; j++) {
inputs = br.readLine().split(" ");
planet_array[j] = new Planet(Integer.parseInt(inputs[0]), Integer.parseInt(inputs[1]),
Integer.parseInt(inputs[2]));
result += planet_array[j].CountContactPoint(start_x, start_y, finish_x, finish_y);
}
sb.append(result).append("\n");
}
System.out.println(sb);
br.close();
}
}
'JAVA > Coding Test' 카테고리의 다른 글
[JAVA] 백준 15650 N과 M (1)_백트래킹 (0) | 2023.03.09 |
---|---|
[JAVA] 백준 15651 N과 M (3)_백트래킹 (0) | 2023.03.09 |
[JAVA] 백준 1002 터렛_기하1 (0) | 2023.03.07 |
[JAVA] 백준 2477 참외밭_기하1 (0) | 2023.03.06 |
[JAVA] 백준 3009 네 번째 점_기하1 (0) | 2023.03.06 |