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

KIMYEONGJUN·어제
0
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개의 댓글

관련 채용 정보