문제링크 : https://www.acmicpc.net/problem/2563 (단계별로 풀어보기 : 2차원 배열)
해당 문제는 순수한 마음으로 풀면된다는 것이 재밌어서 가져와봤다.
문제를 보면 되게 수학적으로 풀어야할거 같은데, 흰색 도화지 영역이 제한되어 있고, 색종이 수가 제한되어 있어 2차원배열로 풀 수 있다. 100100 크기의 배열을 선언하여 배열 한칸이 11 네모 한칸이라고 생각하고 색종이의 왼쪽하단 좌표가 주어졌을 때 색종이 해당하는 부분을 1로 채워줘서 마지막에 배열을 완전탐색하여 합을 계산하여 풀었다.
만약에 2*2 색종이가 1,1 에 놓였다고 했을 때 배열 상태를 그려 본 것이다.
해당 문제의 제한사항이 사라지면 꽤나 어려운 문제가 될 것 같다.
#include <iostream>
#define fastio ios::sync_with_stdio(0), cin.tie(0), cout.tie(0)
using namespace std;
int main()
{
int arr[100][100];
for (int i = 0; i < 100; i++)
fill(arr[i], arr[i] + 100, 0);
int N, x, y;
cin >> N;
for (int i = 0; i < N; i++)
{
cin >> x >> y;
for (int i = x; i < x + 10; i++)
for (int j = y; j < y + 10; j++)
arr[i][j] = 1;
}
int sum = 0;
for (int i = 0; i < 100; i++)
for (int j = 0; j < 100; j++)
sum += arr[i][j];
cout << sum << endl;
return 0;
}```