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 |