공부하기/백준

[Java] 백준 풀기 2669 - 직사각형 네개의 합집합의 면적 구하기

XEV 2023. 11. 21. 23:07

자바 백준 2669번

실버 5

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

 

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

평면에 네 개의 직사각형이 놓여 있는데 그 밑변은 모두 가로축에 평행하다. 이 네 개의 직사각형들은 서로 떨어져 있을 수도 있고, 겹쳐 있을 수도 있고, 하나가 다른 하나를 포함할 수도 있으

www.acmicpc.net

 

 

 

 

 

문제 보기

분류: 구현

 

 

 

 

 

코드 보기

import java.util.Scanner;
public class Main {
public static void main(String[] args) {
// 101x101 크기의 2차원 배열, 좌표는 1부터 시작
int[][] grid = new int[101][101];
// 직사각형 좌표 입력 함수 호출
inputRectangles(grid);
// 면적 계산 함수 호출
int area = calculateArea(grid);
// 면적 출력
System.out.print(area);
}
// 직사각형 좌표를 입력받아 해당 부분을 1로 표시하는 함수
private static void inputRectangles(int[][] grid) {
Scanner sc = new Scanner(System.in);
// 네 개의 직사각형에 대해 반복
for (int i = 0; i < 4; i++) {
int x1 = sc.nextInt(); // 왼쪽 아래 꼭짓점 x 좌표 입력
int y1 = sc.nextInt(); // 왼쪽 아래 꼭짓점 y 좌표 입력
int x2 = sc.nextInt(); // 오른쪽 위 꼭짓점 x 좌표 입력
int y2 = sc.nextInt(); // 오른쪽 위 꼭짓점 y 좌표 입력
// 직사각형이 차지하는 부분을 1로 표시
for (int x = x1; x < x2; x++) {
for (int y = y1; y < y2; y++) {
grid[x][y] = 1;
}
}
}
}
// 1의 개수를 세어 면적을 계산하는 함수
private static int calculateArea(int[][] grid) {
// 면적을 저장할 변수 초기화
int area = 0;
// x 좌표에 대해 반복
for (int i = 1; i <= 100; i++) {
// y 좌표에 대해 반복
for (int j = 1; j <= 100; j++) {
// 해당 좌표가 1인 경우 area 증가
if (grid[i][j] == 1) area++;
}
}
// 계산된 면적 반환
return area;
}
}