알고리즘/구현

[백준알고리즘] 구현 - 2669번 직사각형 네개의 면적 구하기 문제

Fenderblue 2023. 4. 26. 01:42

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

 

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

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

www.acmicpc.net

 

아오!!!!!!!!!!현타와..

처음에 문제보고 사각형들이 겹치는 부분들을 어떻게 다 빼지..겹치는지 아닌지 판단하는 코드 어떻게 짜지..

한번만 겹치는것도 아니고 네개가 다 뭉쳐있으면 그걸 어떻게 일일히 다 뺴지....

막 막 고민하다가 미치겠어서(브론즈 문제라 더 미치는줄알았음) 결국 힌트만 얻어갈까 하고 찾아봤는데

걍 2차원 배열로 풀면 끝나는 문제였다

100x100배열 만들어놓고 해당되는 x좌표의 시작점~끝점, Y좌표의 시작점 ~끝점 2중for문 만들어서

해당되는 위치에 1이라던지 뭘 넣어서 체크하고 그 부분들만 세면 되겠구나..

이미 1이 들어간 위치는 어차피 중복이라는 의미이므로 건너뛰게 했고 최초로 1의 값을 넣게될때마다 count해서

총 면적을 구했다.

하...처음부터 이렇게 접근했으면 쉬웠을텐데 왜 그렇게 생각을 못했을까 너무 짱난다

알고보면 쉽게 풀리는 문제가 아예 어려운 문제보다 심적으로 타격을 주는 것 같다.ㅎㅎ

더 열심히 해야지 모..브론즈 문제라고 안풀지 말고 골고루 풀어야겠다고 느꼈다

 

풀이코드

package baekjoonWeek4;

import java.io.*;
import java.util.StringTokenizer;

public class FourSquares {  //백준 2669번 네 직사각형의 면적 구하기 문제
    public static void main(String[] args) throws IOException {
        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
        BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(System.out));
        int[][] board = new int[100][100];
        int xs; int xe; int ys; int ye;
        int count = 0;  //배열에 몇번 1이 들어가는지 세줄것임
        for (int i = 0; i < 4; i++) {
            StringTokenizer st = new StringTokenizer(br.readLine());
            xs = Integer.parseInt(st.nextToken());  //x좌표 시작점
            ys = Integer.parseInt(st.nextToken());  //y좌표 시작점
            xe = Integer.parseInt(st.nextToken());  //X좌표 끝점
            ye = Integer.parseInt(st.nextToken());  //y좌표 끝점

            for (int x = xs; x < xe; x++) {
                for (int y = ys; y < ye; y++) {
                    if (board[x][y] == 1) { //이미 1이라면 중복되는 부분이라는 의미니까 안세고 넘어감
                        continue;
                    }
                    board[x][y] = 1;
                    count++;
                }
            }
        }
        bw.write(Integer.toString(count));
        bw.flush();
        bw.close();
    }
}