[LeetCode] Max Increase to Keep City Skyline

less than 1 minute read

문제정보

어떻게 풀까?

Grid를 건물의 높이라고 할 때 위아래, 양옆에서 보는 스카이라인이 변하지 않도록 하면서 건물의 높이를 최대로 올릴 경우에 추가분의 총합을 구하는 문제다. map()으로 row별로 최대값을 뽑아 배열을 구성한다.

  • arrow function expression의 경우 함수 몸체가 한줄의 구문이면 암묵적으로 return한다.
  • map()의 return은 배열이다.
  • …는 전개구문이다.

문제풀이(JavaScript)

let transpose = g => g[0].map((v,i) => g.map(row => row[i]));

let maxIncreaseKeepingSkyline = function(grid){
    let sideview = grid.map(row => Math.max(...row));
    let topview = transpose(grid).map(row => Math.max(...row));
    let sum = 0;
    for(let i=0; i<grid.length; i++){
        for(let j=0; j<grid[0].length; j++){
            sum += Math.min(topview[i], sideview[j]) - grid[i][j];
        }
    }
    return sum;
}

Leave a comment