
"어린 왕자가 거쳐야 할 최소의 행성계 진입/이탈 횟수를 출력한다"
출발점부터 끝점까지 갈 때
통과해야하는 최소의 원의 수를 구하는 문제입니다
두 점과 한개의 원의 관계는
아래 그림과같습니다

1번)
아무 점도 포함하고 있지
않은 관계
2번)
하나의 점만 포함하고 있는
관계
3번)
두 점 모두 포함하고 있는
관계
위의 3개 경우에 선을 그어보겠습니다

보이는 것 처럼
2번의 경우만 선이 원을 통과하게 됩니다
(하나의 점만을 포함하고 있는 경우)
1. 두 점과 원(하나씩)을 비교해서
2. 한개의 점만을 포함한다면 (중점과 반지름을 비교해서)
3. 카운트 += 1을 한다
import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.util.StringTokenizer;
public class Main {
public static void main(String[] args) throws Exception {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
StringBuilder sb = new StringBuilder();
int n = Integer.parseInt(br.readLine());
for(int i=0; i<n; i++) {
StringTokenizer st = new StringTokenizer(br.readLine());
int x1 = Integer.parseInt(st.nextToken());
int y1 = Integer.parseInt(st.nextToken());
int x2 = Integer.parseInt(st.nextToken());
int y2 = Integer.parseInt(st.nextToken());
int m = Integer.parseInt(br.readLine());
int count = 0;
for(int j=0; j<m; j++) {
st = new StringTokenizer(br.readLine());
int a = Integer.parseInt(st.nextToken());
int b = Integer.parseInt(st.nextToken());
int r = Integer.parseInt(st.nextToken());
int r1 = (a-x1)*(a-x1) + (b-y1)*(b-y1);
int r2 = (a-x2)*(a-x2) + (b-y2)*(b-y2);
if (r1>r*r && r2>r*r) {
continue;
}else if(r1<r*r && r2<r*r) {
continue;
}else {
count += 1;
}
}
sb.append(count).append("\n");
}
System.out.println(sb);
}
}
for(int i=0; i<n; i++)는
테스트 케이스를 하기위한 반복문입니다
StringTokenizer는 입력받은 String을 Token화합니다
띄어쓰기로 구분한다고 생각하면 됩니다
예) String str = "가 나 다 라" 라면
StringTokenizer를 이용하면
0번 = 가
1번 = 나
2번 = 다
3번 = 라
이렇게 저장할 수 있게 됩니다
'백준 문제풀기 > JAVA' 카테고리의 다른 글
[백준 1010 JAVA 자바] 다리 놓기 (0) | 2023.07.29 |
---|---|
[백준 1008 JAVA 자바] A/B (0) | 2023.07.29 |
[백준 1002 JAVA 자바] 터렛 (0) | 2023.07.29 |
[백준 1001 JAVA 자바] A-B (0) | 2023.07.29 |
[백준 1000 JAVA 자바] A+B (0) | 2023.07.29 |