내가 생각했을때 문제에서 원하는부분
입력은 네 줄이며, 각 줄은 직사각형의 위치를 나타내는 네 개의 정수로 주어진다.
첫 번째와 두 번째의 정수는 사각형의 왼쪽 아래 꼭짓점의 x좌표, y좌표이고 세 번째와 네 번째의 정수는 사각형의 오른쪽 위 꼭짓점의 x좌표, y좌표이다.
모든 x좌표와 y좌표는 1이상이고 100이하인 정수이다.
첫 줄에 네개의 직사각형이 차지하는 면적을 출력한다.
내가 이 문제를 보고 생각해본 부분
입력 처리: BufferedReader를 사용하여 입력을 받는다.
Set 사용: HashSet을 사용하여 각 직사각형의 점을 저장한다.
이렇게 하면 중복된 점이 자동으로 제거되어 면적을 계산할 수 있다.
직사각형의 점 추가: 각 직사각형의 왼쪽 아래 꼭짓점과 오른쪽 위 꼭짓점의 좌표를 이용하여 해당 영역의 모든 점을 Set에 추가해준다.
면적 계산: Set의 크기를 출력하여 최종 면적을 구한다.
코드로 구현
package baekjoon.baekjoon_26;
import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.util.HashSet;
import java.util.Set;
// 백준 2669번 문제
public class Main940 {
public static void main(String[] args) throws Exception {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
Set<Point> points = new HashSet<>();
for(int i = 0; i < 4; i++) {
String[] input = br.readLine().split(" ");
int x1 = Integer.parseInt(input[0]);
int y1 = Integer.parseInt(input[1]);
int x2 = Integer.parseInt(input[2]);
int y2 = Integer.parseInt(input[3]);
for(int x = x1; x < x2; x++) {
for(int y = y1; y < y2; y++) {
points.add(new Point(x, y));
}
}
}
System.out.println(points.size());
br.close();
}
static class Point {
int x, y;
Point(int x, int y) {
this.x = x;
this.y = y;
}
@Override
public boolean equals(Object obj) {
if (this == obj) return true;
if (obj == null || getClass() != obj.getClass()) return false;
Point point = (Point) obj;
return x == point.x && y == point.y;
}
@Override
public int hashCode() {
return 31 * x + y;
}
}
}
코드와 설명이 부족할수 있습니다. 코드를 보시고 문제가 있거나 코드 개선이 필요한 부분이 있다면 댓글로 말해주시면 감사한 마음으로 참고해 코드를 수정 하겠습니다.