807. Max Increase to Keep City Skyline

늘보·2021년 8월 21일
0

LeetCode

목록 보기
25/69

💡풀이

/**
 * @param {number[][]} grid
 * @return {number}
 */
var maxIncreaseKeepingSkyline = function (grid) {
  let verticalArray = [];
  let horizontalArray = [];

  for (let i = 0; i < grid.length; i++) {
    let maxHorizontal = 0;
    let maxVertical = 0;
    for (let j = 0; j < grid[i].length; j++) {
      maxVertical = Math.max(grid[i][j], maxVertical);
      maxHorizontal = Math.max(grid[j][i], maxHorizontal);
    }
    verticalArray.push(maxVertical);
    horizontalArray.push(maxHorizontal);
  }

  console.log('horizontalArray: ', horizontalArray);
  console.log('verticalArray: ', verticalArray);

  
  // 중요 부분
  let sum = 0;

  for (let i = 0; i < grid.length; i++) {
    for (let j = 0; j < grid[i].length; j++) {
      let newHeight =
        horizontalArray[i] > verticalArray[j]
          ? verticalArray[j]
          : horizontalArray[i];
      sum += newHeight - grid[i][j];
    }
  }

  return sum;
};

let grid = [
  [3, 0, 8, 4],
  [2, 4, 5, 7],
  [9, 2, 6, 3],
  [0, 3, 1, 0],
];

let gridNew = [
  [8, 4, 8, 7],
  [7, 4, 7, 7],
  [9, 4, 8, 7],
  [3, 3, 3, 3],
];

maxIncreaseKeepingSkyline(grid);

📝정리

'중요 부분'이라고 적힌 부분은 내가 스스로 해결하지 못했던 부분이다. 첫 번째 이중 loop이 끝난 뒤, horizontalArrayverticalArray 배열에는 각각 이렇게 요소가 담긴다.

horizontalArray:  [ 9, 4, 8, 7 ]
verticalArray:  [ 8, 7, 9, 3 ]

output은 두 배열의 각 요소의 차이의 합계를 구하는 것이었기 때문에, horizontalArray[i] > verticalArray[j]일 때, 더 작은 값gridNew 배열에 들어가야 하므로, 더 작은 값인 verticalArray[j]로 바꿔주고, 반대의 경우에는 horizontalArray[i]로 바꿔주어야 했다.

바꾼 값을 newHeight 변수에 넣어주고 바로 grid[i][j]를 빼주면 각 요소마다 차이가 나오기 때문에, 이를 그대로 sum 변수에 넣어주면 된다.

수정, 지적을 환영합니다!

문제 링크

https://leetcode.com/problems/max-increase-to-keep-city-skyline/

LeetCode GitHub

https://github.com/tTab1204/LeetCode

0개의 댓글