😎풀이

  1. 상단 뷰는, 블록이 하나 이상 존재할 경우 무조건 하나의 면적씩만 차지한다.
  2. 전면 뷰는, 열의 최댓값만큼 면적을 차지한다.
  3. 측면 뷰는, 행의 최댓값만큼 면적을 차지한다.
  4. 상단, 전면, 측면 면적의 합계를 반환한다.
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
};
profile
내 지식을 공유할 수 있는 대담함

0개의 댓글