이번 문제는 특별한 알고리즘 구현 없이 해결할 수 있는 문제였다. 본인은 처음에 전체 넓이를 더한 뒤에 겹치는 부분을 빼야한다고 생각했다. 그러다가 문득 색종이가 올라간 부분만 표시를 해주면 된다는 생각을 하게 되었고 그 방법으로 간단하게 해결할 수 있었다.
#include <iostream>
#include <vector>
#define MAX 101
using namespace std;
bool total[MAX][MAX];
int n;
pair<int, int> paper[MAX];
int result=0;
void Input(){
cin>>n;
for(int i=0; i<n; i++){
cin>>paper[i].first>>paper[i].second;
}
}
int Solution(){
for(int i=0; i<n; i++){
for(int j=paper[i].second; j<paper[i].second+10; j++){
for(int k=paper[i].first; k<paper[i].first+10; k++){
total[j][k]=true;
}
}
}
for(int i=0; i<MAX; i++){
for(int j=0; j<MAX; j++){
if(total[i][j])
result++;
}
}
return result;
}
int main(){
ios::sync_with_stdio(false);
cin.tie(0);
cout.tie(0);
Input();
cout<<Solution()<<endl;
return 0;
}