백준 2669 직사각형 네개의 합집합의 면적 구하기
본문 바로가기
알고리즘 모음집/알고리즘 (Algorithm)

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

by KyeongMin 2019. 7. 16.
728x90
반응형

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

 

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

평면에 네 개의 직사각형이 놓여 있는데 그 밑변은 모두 가로축에 평행하다. 이 네 개의 직사각형들은 서로 떨어져 있을 수도 있고, 겹쳐 있을 수도 있고, 하나가 다른 하나를 포함할 수도 있으며, 변이나 꼭짓점이 겹칠 수도 있다. 이 직사각형들이 차지하는 면적을 구하는 프로그램을 작성하시오.

www.acmicpc.net

출처 : boj 백준사이트

이런 문제는 정말 쉬운 문제 입니다. 

입력 예제를 보면

1 2 4 4

2 3 5 7

3 1 6 5

7 3 8 6 

본문에는 첫번째 한줄이 각 사각형이랑 생각하시면되고

1, 2 과 사각형의 왼쪽 아래 꼭짓점  x좌표 , y좌표 즉

4, 4는 사각형의 오른쪽  위 꼭짓점의 x 좌표, y좌표 인데 왜 아래그림은 거꾸로 했는지

궁금해하실수있습니다. 

 

 

본문 그림은 일치하지만 저희들이 문제를 풀려면 배열에 저장해야하는데 배열은 저런식이라서

보기 편하게 구현 편하기위해 한번 그려보았습니다. 그냥 이중 포문으로 그공간에 1로만 표시해놓고

1의 갯수를 세면 되겠죠?

 

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
#include<stdio.h>
int N = 4;
int map[104][104];
int main(void) {
    for (int i = 0; i < 4; i++) {
            int sy, ey, sx, ex;
            scanf("%d %d %d %d"&sy, &sx, &ey, &ex);
 
            for (int y = sy; y < ey; y++) {
                for (int x = sx; x < ex; x++) {
                    map[y][x] = 1;
                }
            }
        
    }
    int cnt = 0;
 
    for (int i = 0; i < 100; i++) {
        for (int j = 0; j < 100; j++) {
            if (map[i][j] == 1)cnt++;
        }
    }
    printf("%d\n", cnt);
    return 0;
}
 
 

제방법이 정확히 일반적인 방법이라 할수 없지만 이렇게 구현해도 통과는 됩니다.

무튼 참고하시고 열공하세요 오늘은 여기까지 입니다.

728x90
반응형

댓글