본문 바로가기

백준

2563)색종이

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


흰색 도화지에 검은색 색종이를 붙인 후 검은색 색종이의 넓이를 구해야한다.


도화지에 색종이를 붙인 후 넓이를 어떻게 표현해야 할까?


검은색 색종이를 겹쳤을 때 중복 영역을 어떻게 처리해야 할까?


이차원 배열이 도화지나 색종이의 넓이를 표현하기에 적합하다.

가로 5, 세로 5인 도화지를 위 그림처럼 5x5 이차원 배열로 표현할 수 있다.


좌표와 각 격자 공간의 중심이 일치하지 않기 때문에 격자 공간의 좌하단 좌표가 격자 공간을 대표한다고 간주한다.

(0,1)에 2x2크기의 검은색 색종이를 붙였다.

(2,1)에 2x2 크기의 검은색 색종이를 붙였다.


즉 2차원 배열에 색종이의 면적만큼 TRUE로 바꿔주고 그 수를 세기만 하면 된다.


중첩 영역은 TRUE일 때만 수를 세니 걱정하지 않아도 된다.


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
26
27
28
29
30
31
32
33
34
35
36
#include<stdio.h>
#define TRUE 1
#define FALSE 0
#define ENTIRE_RANGE 100
#define RANGE 10
 
int fillArea(int area[ENTIRE_RANGE][ENTIRE_RANGE], int x,int y) {
    static int count = 0;
 
    for (int i = x; (i<x+RANGE) && (i<ENTIRE_RANGE);i++) {
        for (int j = y; (j<y+RANGE) && (j<ENTIRE_RANGE);j++) {
            if (!area[i][j]) {
                area[i][j] = TRUE;
                count++;
            }
        }
    }
 
    return count;
}
 
int main() {
    int entireArea[ENTIRE_RANGE][ENTIRE_RANGE] = {FALSE};
    int x, y;
    int N;
    int totalArea;
 
    scanf("%d",&N);
    for (int i = 0; i < N;i++) {
        scanf("%d %d",&x,&y);
        totalArea = fillArea(entireArea,x,y);
    }
    printf("%d\n",totalArea);
 
    return 0;
}
cs






'백준' 카테고리의 다른 글

1026)보물  (0) 2019.02.03
2108)통계학  (0) 2019.02.02
1789)수들의 합  (0) 2019.02.02
10798)세로읽기  (0) 2019.02.02
6376)e 계산  (0) 2019.02.02