Projection Area of 3D Shapes

You are given an n x n grid where we place some 1 x 1 x 1 cubes that are axis-aligned with the xy, and z axes.

Each value v = grid[i][j] represents a tower of v cubes placed on top of the cell (i, j).

We view the projection of these cubes onto the xyyz, and zx planes.

projection is like a shadow, that maps our 3-dimensional figure to a 2-dimensional plane. We are viewing the "shadow" when looking at the cubes from the top, the front, and the side.

Return the total area of all three projections.

Example:

Input: grid = [[1,2],[3,4]]
Output: 17

Approach:

C++

#include <bits/stdc++.h>
using namespace std;

int projectionArea(vector<vector<int>> &grid)
{
    // 1: Top view: how many grids have the cubes
    // 2: Front view: maximum number of cubes in a column
    // 3: Side view: maximum number of cubes in a row
    int top = 0front = 0side = 0size = grid.size();
    vector<intmaxCubesInCol(size);
    for (int i = 0i < size; ++i)
    {
        int maxCubesInRow = 0;
        for (int j = 0j < size; ++j)
        {

            //cubes
            int cubes = grid[i][j];

            //update top value
            top = cubes > 0 ? top + 1 : top;

            //uodate number of cubes in the row
            maxCubesInRow = cubes > maxCubesInRow ?
 cubes : maxCubesInRow;

            //maximum number of cubes in the colums
            maxCubesInCol[j] = cubes > maxCubesInCol[j] ? 
cubes : maxCubesInCol[j];
        }

        //update side
        side += maxCubesInRow;
    }

    front = accumulate(maxCubesInCol.begin(),
 maxCubesInCol.end(), 0);
    return front + side + top;
}

int main()
{
    vector<vector<int>> grid = {{12}, {34}};

    cout << projectionArea(grid);

    return 0;
}


No comments:

Post a Comment