SWEA/D3

[SWEA] - 6853. 직사각형과 점 (D3)

0으하하0 2022. 5. 13. 21:54

[문제]

직사각형과 점들이 있다. 각 점들이 다음 중 어떤 상태에 있는지 판별하여,
각각의 상태인 점이 몇 개씩 있는지 구하는 프로그램을 작성하라.
1. 점이 완전히 직사각형 내부에 있다.
2. 점이 직사각형의 네 변 중 적어도 하나의 위에 있다.
3. 점이 완전히 직사각형 외부에 있다.

[입력]
첫 번째 줄에 테스트 케이스의 수 T가 주어진다.
각 테스트 케이스의 첫 번째 줄에는 네 정수 X1, Y1, X2, Y2 ( -104 ≤ X1 < X2 ≤ 104, -104 ≤ Y1 < Y2 ≤ 104 )가 공백 하나로 구분되어 주어진다.
이는 직사각형이 xy평면 위의 네 점 ( X1, Y1 ), ( X1, Y2 ), ( X2, Y2 ), ( X2, Y1 )으로 이루어진 직사각형이라는 뜻이다.
두 번째 줄에는 점의 개수를 나타내는 하나의 정수 N ( 1 ≤ N ≤ 104 ) 이 주어진다.
다음 N개의 줄의 각 줄에는 두 정수 x, y ( -104 ≤ x,y ≤ 104 ) 가 공백 하나로 구분되어 주어진다.
이는 xy평면 위의 점 ( x, y )에 점이 하나 있다는 의미이다.

[출력]
각 테스트 케이스마다 ‘#x’(x는 테스트케이스 번호를 의미하며 1부터 시작한다)를 출력하고 한 칸을 띄운 후,
세 정수를 공백 하나로 구분하여 출력한다.
첫 번째 정수는 완전히 직사각형 내부에 있는 점의 개수, 두 번째 정수는 직사각형의 네 변 중 적어도 하나의 위에 있는 점의 개수,
세 번째 정수는 완전히 직사각형 외부에 있는 점의 개수여야 한다

문제 풀기

6853. 직사각형과 점

 


[풀이]

import java.util.Scanner;

class Solution {	
	public static void main(String[] args) throws Exception {
		Scanner sc = new Scanner(System.in);
		
		int t = sc.nextInt();
		
		for(int tc=1; tc<=t; tc++) {
			int x1 = sc.nextInt();
			int y1 = sc.nextInt();
			int x2 = sc.nextInt();
			int y2 = sc.nextInt();
			
			int n = sc.nextInt();
			
			int in = 0;
			int on = 0;
			int out = 0;
			
			for(int i=0; i<n; i++) {
				int x = sc.nextInt();
				int y = sc.nextInt();
				
				if(x < x1 || x > x2 || y < y1 || y > y2)
					out++;
				else if((x > x1 && x < x2) && (y > y1 && y < y2)) 
					in++;
				else
					on ++;
			}
			
			System.out.format("#%d %d %d %d\n", tc, in, on, out);
		}
	}
}