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

KIMYEONGJUN·2025년 2월 22일
post-thumbnail

문제

내가 생각했을때 문제에서 원하는부분

입력은 네 줄이며, 각 줄은 직사각형의 위치를 나타내는 네 개의 정수로 주어진다.
첫 번째와 두 번째의 정수는 사각형의 왼쪽 아래 꼭짓점의 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;
        }
    }
}

마무리

코드와 설명이 부족할수 있습니다. 코드를 보시고 문제가 있거나 코드 개선이 필요한 부분이 있다면 댓글로 말해주시면 감사한 마음으로 참고해 코드를 수정 하겠습니다.

profile
Junior backend developer

0개의 댓글