1 class Solution
2 {
3 public:
4 int surfaceArea(vector<vector<int>> &grid)
5 {
6 int result = 0;
7 for(auto v:grid)
8 for(auto d:v)
9 {
10 if(d==1)
11 result += 6;
12 else if(d==0)
13 continue;
14 else
15 result += 6+4*(d-1);
16
17 }
18 // cout << result << endl;
19 for(int i = 0;i < grid.size();i ++)
20 {
21 for(int j = 0;j < grid[i].size();j ++)
22 {
23 if(i==grid.size()-1)
24 {
25 if(j==grid[i].size()-1)
26 {
27 continue;
28 }
29 else
30 {
31 if(grid[i][j]<grid[i][j+1])
32 result -= grid[i][j]*2;
33 else
34 result -= grid[i][j+1]*2;
35 }
36 }
37 else
38 {
39 if(j==grid[i].size()-1)
40 {
41 if(grid[i][j]<grid[i+1][j])
42 result -= grid[i][j]*2;
43 else
44 result -= grid[i+1][j]*2;
45 }
46 else
47 {
48 if(grid[i][j]<grid[i][j+1])
49 result -= grid[i][j]*2;
50 else
51 result -= grid[i][j+1]*2;
52 if(grid[i][j]<grid[i+1][j])
53 result -= grid[i][j]*2;
54 else
55 result -= grid[i+1][j]*2;
56 }
57 }
58 }
59 }
60 return result;
61 }
62 };