ALGORITHM/BOJ

[IM 대비] BOJ_2669 직사각형 네 개의 합집합의 면적 구하기

lemon-scone 2021. 8. 23. 20:34

https://www.acmicpc.net/problem/2669

 

2669번: 직사각형 네개의 합집합의 면적 구하기

입력은 네 줄이며, 각 줄은 직사각형의 위치를 나타내는 네 개의 정수로 주어진다. 첫 번째와 두 번째의 정수는 사각형의 왼쪽 아래 꼭짓점의 x좌표, y좌표이고 세 번째와 네 번째의 정수는 사각

www.acmicpc.net

 

package IM;

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.StringTokenizer;

// 직사각형 네 개의 합집합의 면적 구하기

class Pair{
	
	int x1;
	int y1;
	int x2;
	int y2;
	
	public Pair() {
		super();
	}
	
	public Pair(int x1, int y1, int x2, int y2) {
		super();
		this.x1 = x1;
		this.y1 = y1;
		this.x2 = x2;
		this.y2 = y2;
	}
	
}

public class BOJ_2669 {
	
	public static int[][] map = new int[101][101];
	
	public static void main(String[] args) throws IOException {
		
		BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
		StringTokenizer st = null;
		Pair pair = new Pair();
		
		Pair[] p = new Pair[4];
		for (int i = 0; i < 4; i++) {
			st = new StringTokenizer(br.readLine(), " ");
			p[i].x1 = Integer.parseInt(st.nextToken());
			p[i].y1 = Integer.parseInt(st.nextToken());
			p[i].x2 = Integer.parseInt(st.nextToken());
			p[i].y2 = Integer.parseInt(st.nextToken());
			
		}
		
		for (int i = 0; i < 4; i++) {
			for (int j = p[i].x1; j <= p[i].x2; j++) {
				for (int k = p[i].y1; k <= p[i].y2; k++) {
					map[j][k] = 1;
				}
			}
		}
		
		int cnt = 0;
		for (int i = 0; i < 100; i++) {
			for (int j = 0; j < 100; j++) {
				if (map[i][j]==1) {
					cnt++;
				}
			}
		}
		System.out.println(cnt);
	}
}

 

package IM;

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.StringTokenizer;

// 직사각형 네 개의 합집합의 면적 구하기
public class BOJ_2669_sol {
	
	public static int[][] map = new int[101][101];
	
	public static void main(String[] args) throws IOException {
		
		BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
		StringTokenizer st = null;
		
		boolean map[][] = new boolean[101][101];
		int result = 0;
		
		for (int i = 0; i < 4; i++) {
			st = new StringTokenizer(br.readLine(), " ");
			int lx = Integer.parseInt(st.nextToken());
			int ly = Integer.parseInt(st.nextToken());
			int rx = Integer.parseInt(st.nextToken());
			int ry = Integer.parseInt(st.nextToken());
			
			for (int y = ly; y < ry; y++) {
				for (int x = lx; x < rx; x++) {
					if(!map[y][x]) {
						map[y][x] = true;
						result++;
					}
				}
			}
		}
		System.out.println(result);
	}
}