리트코드 2482 문제
You are given a 0-indexed m x n binary matrix grid.
A 0-indexed m x n difference matrix diff is created with the following procedure:
Let the number of ones in the ith row be onesRowi.
Let the number of ones in the jth column be onesColj.
Let the number of zeros in the ith row be zerosRowi.
Let the number of zeros in the jth column be zerosColj.
diff[i][j] = onesRowi + onesColj - zerosRowi - zerosColj
Return the difference matrix diff.
Example 1:
- Input: grid = [[0,1,1],[1,0,1],[0,0,1]]
- Output: [[0,0,4],[0,0,4],[-2,-2,2]]
- Explanation:
- - diff[0][0] = onesRow0 + onesCol0 - zerosRow0 - zerosCol0 = 2 + 1 - 1 - 2 = 0
- - diff[0][1] = onesRow0 + onesCol1 - zerosRow0 - zerosCol1 = 2 + 1 - 1 - 2 = 0
- - diff[0][2] = onesRow0 + onesCol2 - zerosRow0 - zerosCol2 = 2 + 3 - 1 - 0 = 4
- - diff[1][0] = onesRow1 + onesCol0 - zerosRow1 - zerosCol0 = 2 + 1 - 1 - 2 = 0
- - diff[1][1] = onesRow1 + onesCol1 - zerosRow1 - zerosCol1 = 2 + 1 - 1 - 2 = 0
- - diff[1][2] = onesRow1 + onesCol2 - zerosRow1 - zerosCol2 = 2 + 3 - 1 - 0 = 4
- - diff[2][0] = onesRow2 + onesCol0 - zerosRow2 - zerosCol0 = 1 + 1 - 2 - 2 = -2
- - diff[2][1] = onesRow2 + onesCol1 - zerosRow2 - zerosCol1 = 1 + 1 - 2 - 2 = -2
- - diff[2][2] = onesRow2 + onesCol2 - zerosRow2 - zerosCol2 = 1 + 3 - 2 - 0 = 2
Example 2:
- Input: grid = [[1,1,1],[1,1,1]]
- Output: [[5,5,5],[5,5,5]]
- Explanation:
- - diff[0][0] = onesRow0 + onesCol0 - zerosRow0 - zerosCol0 = 3 + 2 - 0 - 0 = 5
- - diff[0][1] = onesRow0 + onesCol1 - zerosRow0 - zerosCol1 = 3 + 2 - 0 - 0 = 5
- - diff[0][2] = onesRow0 + onesCol2 - zerosRow0 - zerosCol2 = 3 + 2 - 0 - 0 = 5
- - diff[1][0] = onesRow1 + onesCol0 - zerosRow1 - zerosCol0 = 3 + 2 - 0 - 0 = 5
- - diff[1][1] = onesRow1 + onesCol1 - zerosRow1 - zerosCol1 = 3 + 2 - 0 - 0 = 5
- - diff[1][2] = onesRow1 + onesCol2 - zerosRow1 - zerosCol2 = 3 + 2 - 0 - 0 = 5
Constraints:
- m == grid.length
- n == grid[i].length
- 1 <= m, n <= 105
- 1 <= m * n <= 105
- grid[i][j] is either 0 or 1.
먼저 모든 인덱스의 셀을 돌면서 해당 행의 1의 개수와 해당 열의 1의 개수를 수집한다.
0의 개수는 (행 또는 열의 개수 - 1의 개수)로 구해지니까 따로 수집할 필요가 없다.
다시 모든 셀을 돌면서 주어신 공식으로 diff를 구하고 이차원 벡터를 반환한다.
class Solution {
public:
vector<vector<int>> onesMinusZeros(vector<vector<int>>& grid) {
int row = grid.size();
int col = grid[0].size();
vector<int> onesRow(row, 0);
vector<int> onesCol(col, 0);
vector<vector<int>> diff(row, vector<int>(col));
for(int i =0; i < row; i++) {
for(int j = 0; j < col; j++) {
onesRow[i] += grid[i][j];
onesCol[j] += grid[i][j];
}
}
for(int i =0; i < row; i++) {
for(int j = 0; j < col; j++) {
diff[i][j] = (2 * onesRow[i] - row) + (2 * onesCol[j] - col);
}
}
return diff;
}
};
'코딩테스트' 카테고리의 다른 글
C++ ] leetCode 2120 - Execution of All Suffix Instructions Staying in a Grid (0) | 2024.03.12 |
---|---|
C++ ] leetCode 2161 - Partition Array According to Given Pivot (0) | 2024.03.08 |
C++ ] leetCode 2545 - Sort the Students by Their Kth Score (0) | 2024.03.04 |
C ] leetCode 2125 - Number of Laser Beams in a Bank (0) | 2024.03.02 |
C++ ] leetCode 1630 - Arithmetic Subarrays (0) | 2024.02.28 |