
😎풀이
- 상단 뷰는, 블록이 하나 이상 존재할 경우 무조건 하나의 면적씩만 차지한다.
- 전면 뷰는, 열의 최댓값만큼 면적을 차지한다.
- 측면 뷰는, 행의 최댓값만큼 면적을 차지한다.
- 상단, 전면, 측면 면적의 합계를 반환한다.
function projectionArea(grid: number[][]): number {
const rowMax = grid.length
const colMax = grid[0].length
let topView = 0
let frontView = Array.from({length: colMax}, () => 0)
let sideView = 0
for(let row = 0; row < rowMax; row++) {
let curSideViewMax = 0
let curFrontViewMax = 0
for(let col = 0; col < colMax; col++) {
const curBlock = grid[row][col]
if(curBlock) topView++
curSideViewMax = Math.max(curSideViewMax, curBlock)
frontView[col] = Math.max(frontView[col], curBlock)
}
sideView += curSideViewMax
}
return topView + frontView.reduce((acc, cur) => acc + cur, 0) + sideView
};