/**
* @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이 끝난 뒤, horizontalArray
와 verticalArray
배열에는 각각 이렇게 요소가 담긴다.
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/