엄지월드

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

알고리즘

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

킨글 2024. 4. 22. 22:54

문제

방법

어려운 문제라고 생각하고, 어떻게 접근해야 하나 싶었다.

하지만 푸는 법을 보니 어렵지 않은 문제였다. 간단히 말하면 주어진 범위에 대해서 모두 1이나 true로 만들어서 색칠해주고, 전체 배열을 돌면서 1이나 true인 부분을 더해주면 되는 문제였다. 

실수했던 부분은 아래와 같이 x~y까지 for문을 돌 때에 <가 아니라 <=로 해서 출력이 26이 아니라 43이 나왔었다.

디버깅 시 문제에서 주어진 예시와 다르게 색칠되는 것을 확인하여 해결할 수 있었다.

for (int j = y1; j <= y2; j++) {
    for (int k = x1; k <= x2; k++) {
        arr[j][k] = true;
    }
}

 

코드

import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.OutputStreamWriter;
import java.util.StringTokenizer;

public class Main {

    public static void main(String[] args) throws IOException {
        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
        BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(System.out));

        StringTokenizer st;

        boolean[][] arr = new boolean[101][101];
        for (int i = 0; i < 4; i++) {
            st = new StringTokenizer(br.readLine());
            int x1 = Integer.parseInt(st.nextToken());
            int y1 = Integer.parseInt(st.nextToken());
            int x2 = Integer.parseInt(st.nextToken());
            int y2 = Integer.parseInt(st.nextToken());

            for (int j = y1; j <= y2; j++) {
                for (int k = x1; k <= x2; k++) {
                    arr[j][k] = true;
                }
            }
        }

        int result = 0;
        for (int i = 1; i < 101; i++) {
            for (int j = 1; j < 101; j++) {
                if(arr[j][i]) {
                    result += 1;
                }
            }
        }
        bw.write(String.valueOf(result));

        bw.flush();
        bw.close();
    }
}

'알고리즘' 카테고리의 다른 글

백준 5635 생일  (0) 2024.04.24
백준 11931 수 정렬하기 4  (0) 2024.04.23
백준 2822 점수 계산  (0) 2024.04.19
백준 1543 문서 검색  (0) 2024.04.16
백준 1920 수 찾기  (0) 2024.04.15
Comments