



아니...그사이에 단계별 풀이에서 정리해고당한 문제다. 이러면 유입이 줄어든다고!
문제는 간단하다. 중간 직사각형과, 양쪽 반원 사이에 있는지를 따지면 된다.
직사각형은 기준점인 x,y에서 대각선으로 맨끝점인 x+w, y+h 사이에 선수의 각 x, y 좌표가 있으면 된다.
원은 원의 중심에서 선수까지의 거리 d가 반지름 h/2보다 작으면 내부에 있다고 볼 수 있다.
그렇게 구해주면 끝.
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));
StringTokenizer st = new StringTokenizer(br.readLine(), " ");
int w = Integer.parseInt(st.nextToken());
int h = Integer.parseInt(st.nextToken());
int x = Integer.parseInt(st.nextToken());
int y = Integer.parseInt(st.nextToken());
int p = Integer.parseInt(st.nextToken());
int r = h/2; // 반지름의 길이
int count = 0; // 링크 안의 선수의 수를 세는 count변수로 최종출력값.
for (int i=0; i<p; i++) {
st = new StringTokenizer(br.readLine(), " ");
int px = Integer.parseInt(st.nextToken());
int py = Integer.parseInt(st.nextToken());
if ((x<=px && px<=x+w) && (y<=py && py<=y+h)) {
count++; // 사각형 안에 있는 선수들 수만큼 count를 올려준다.
} else if ((distance(x, y+r, px, py)<=r)
|| distance(x+w, y+r, px, py)<=r){
count++; // 두 원 안에 있는 선수들 수만큼 count를 올려준다.
}
}
System.out.println(count);
}
public static double distance(int x1, int y1, int x2, int y2) {
return Math.sqrt(Math.pow(x1-x2,2)+Math.pow(y1-y2, 2));
} // 거리를 구할 매소드 생성
}'백준 문제풀이' 카테고리의 다른 글
| 1037. 약수 (자바, Java) (0) | 2022.10.24 |
|---|---|
| 5086. 배수와 약수 (자바, Java) (0) | 2022.10.24 |
| 1004. 어린왕자 (자바, Java) (0) | 2022.10.24 |
| 2477. 터렛 (자바, Java) (0) | 2022.10.10 |
| 2477. 참외밭 (자바, Java) (0) | 2022.10.10 |