|
1 | 1 | function solution(board, skill) { |
2 | | - let currentBoard = board; |
| 2 | + const row = board.length; |
| 3 | + const col = board[0].length; |
| 4 | + const sumBoard = Array.from({ length: row + 1 }, () => |
| 5 | + Array(col + 1).fill(0) |
| 6 | + ); |
3 | 7 |
|
4 | 8 | for (let i = 0; i < skill.length; i++) { |
5 | | - for (let j = skill[i][1]; j <= skill[i][3]; j++) { |
6 | | - for (let k = skill[i][2]; k <= skill[i][4]; k++) { |
7 | | - if (skill[i][0] === 1) { |
8 | | - currentBoard[j][k] -= skill[i][5]; |
9 | | - } |
10 | | - if (skill[i][0] === 2) { |
11 | | - currentBoard[j][k] += skill[i][5]; |
12 | | - } |
13 | | - } |
| 9 | + const [type, r1, c1, r2, c2, degree] = skill[i]; |
| 10 | + const value = type === 1 ? -degree : degree; |
| 11 | + |
| 12 | + sumBoard[r1][c1] += value; |
| 13 | + sumBoard[r1][c2 + 1] -= value; |
| 14 | + sumBoard[r2 + 1][c1] -= value; |
| 15 | + sumBoard[r2 + 1][c2 + 1] += value; |
| 16 | + } |
| 17 | + |
| 18 | + // 가로 누적합 |
| 19 | + for (let i = 0; i <= row; i++) { |
| 20 | + for (let j = 1; j <= col; j++) { |
| 21 | + sumBoard[i][j] += sumBoard[i][j - 1]; |
| 22 | + } |
| 23 | + } |
| 24 | + |
| 25 | + // 세로 누적합 |
| 26 | + for (let j = 0; j <= col; j++) { |
| 27 | + for (let i = 1; i <= row; i++) { |
| 28 | + sumBoard[i][j] += sumBoard[i - 1][j]; |
14 | 29 | } |
15 | 30 | } |
16 | 31 |
|
17 | 32 | let count = 0; |
18 | | - for (let j = 0; j < board.length; j++) { |
19 | | - for (let k = 0; k < board[0].length; k++) { |
20 | | - if (currentBoard[j][k] > 0) count++; |
| 33 | + for (let i = 0; i < row; i++) { |
| 34 | + for (let j = 0; j < col; j++) { |
| 35 | + if (board[i][j] + sumBoard[i][j] > 0) count++; |
21 | 36 | } |
22 | 37 | } |
23 | 38 |
|
|
0 commit comments