sm 기술 블로그
104. 1358(하키) 본문
import java.util.*;
import java.io.*;
class Main{
public static void main(String args[])throws IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
StringBuilder sb = new StringBuilder();
String[] sBits = br.readLine().split(" ");
int W = Integer.parseInt(sBits[0]);
int H = Integer.parseInt(sBits[1]);
int X = Integer.parseInt(sBits[2]);
int Y = Integer.parseInt(sBits[3]);
int P = Integer.parseInt(sBits[4]);
int R = H/2;
int cnt = 0;
for(int i = 0; i < P; i++) {
String[] sBits2 = br.readLine().split(" ");
int x = Integer.parseInt(sBits2[0]);
int y = Integer.parseInt(sBits2[1]);
if(Math.pow(X-x, 2)+Math.pow(Y+R-y, 2) <= Math.pow(R, 2)) {
cnt++;
}
else if(X<=x && x<X+W && Y <= y && y <= Y+H) {
cnt++;
}
else if(Math.pow(X+W-x, 2)+Math.pow(Y+R-y, 2) <= Math.pow(R, 2)) {
cnt++;
}
}
System.out.println(cnt);
}
}
문제요약
하키장 내에(경계값과 안) 있는 선수는 몇명인가?
설명
문제는 이렇다.
두 원이 있고 하나의 직사각형이 있는데 선수의 좌표가 주어 졌을 때 반경내에 있는지에 대해 물어보는 것이다.
반지름은 H/2이다.
만약 선수좌표 내에 있다면
1. 첫번째 원에 있을 경우
다음과 같이 R 내부에 있어야 한다.
Y+R인 이유는
첫번째 원의 중심은 Y+R이다.
2. 직사각형 내에 있을 경우
좌표는 다음과 같다.
이 좌표 내에 있기 위해서는 x는 X와 X+W 내에, y는 Y와 Y+H에 있으면 된다.
3. 두번째 원에 있을 경우
다음과 같을 때 선수가 하키장에 있는 것이다.
따라서 위 3가지 경우 중 하나라도 해당된다면 그 선수는 하키장 내에 있는 것이다.
'문제 > 백준_자바' 카테고리의 다른 글
106. 1037(약수) (0) | 2022.06.24 |
---|---|
105. 5086(배수와 약수) (0) | 2022.06.24 |
103. 1004(어린 왕자) (0) | 2022.06.23 |
102. 1002(터렛) (0) | 2022.06.22 |
101. 택시 기하학(3053) (0) | 2022.06.22 |
Comments