본문 바로가기
코딩테스트

C++ ] leetCode 2482 - Difference Between Ones and Zeros in Row and Column

by eteo 2024. 3. 6.

 

 

리트코드 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;
    }
};