sm 기술 블로그

104. 1358(하키) 본문

문제/백준_자바

104. 1358(하키)

sm_hope 2022. 6. 23. 22:09
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