넘치게 채우기

[LeetCode] 2482. Difference Between Ones and Zeros in Row and Column 본문

PS/LeetCode

[LeetCode] 2482. Difference Between Ones and Zeros in Row and Column

riveroverflow 2023. 12. 14. 12:23
728x90
반응형

https://leetcode.com/problems/difference-between-ones-and-zeros-in-row-and-column/description/

 

Difference Between Ones and Zeros in Row and Column - LeetCode

Can you solve this real interview question? Difference Between Ones and Zeros in Row and Column - 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

leetcode.com

leetcode - Difference Between Ones and Zeros in Row and Column

문제 유형 : 행렬

문제 난이도 : Medium

 

문제

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 onesRow[i].
  • Let the number of ones in the jth column be onesCol[j].
  • Let the number of zeros in the ith row be zerosRow[i].
  • Let the number of zeros in the jth column be zerosCol[j].
  • diff[i][j] = onesRow[i] + onesCol[j] - zerosRow[i] - zerosCol[j]

Return the difference matrix diff.

 

당신은 바이너리 행렬 grid를 m*n의 크기로 받습니다.

m*n의 크기의 diff라는 행렬이 있다고 합시다.

값은 이렇게 정해집니다.

 onesRow[i]를 i번째행의 1의 개수라고 합시다.

 onesCol[i]를 j번째열의 0의 개수라고 합시다.

 zerosRow[i]를 i번째행의 1의 개수라고 합시다.

 zerosRow[i]를 j번째열의 0의 개수라고 합시다.

diff[i][j] = onesRow[i] + onesCol[j] - zerosRow[i] - zerosCol[j]

 

diff행렬을 반환하시오.

 

풀이

저 조건대로 구해주면 된다.

반복적인 연산을 피하기 위해, onesRow,Col, zerosRow,Col을 각각 만들어준다.

 

이차원배열을 순회해주면서 먼저 4개의 행렬을 완성해준다.

for i in range(m):

    for j in range(n):

        만약 grid[i][j]가 1이면 onesRow[i],Col[j]에 1씩 누적

        아니라면 zerosRow,Col에 1씩 누적...

 

그리고 diff[i][j]를 채워주면 된다.

 

 

코드

C++

class Solution {
public:
    vector<vector<int>> onesMinusZeros(vector<vector<int>>& grid) {
        const int m = grid.size();
        const int n = grid[0].size();
        vector<vector<int>> diff(m, vector<int>(n, 0));
        vector<int> row_one(m, 0);
        vector<int> col_one(n, 0);
        vector<int> row_zero(m, 0);
        vector<int> col_zero(n, 0);

        for(int i = 0; i < m; i++) {
            for(int j = 0; j < n; j++) {
                if(grid[i][j]) {
                    row_one[i]++;
                    col_one[j]++;
                } else {
                    row_zero[i]++;
                    col_zero[j]++;
                }
            }
        }

        for(int i = 0; i < m; i++) {
            for(int j = 0; j < n; j++) {
                diff[i][j] = row_one[i] + col_one[j] - row_zero[i] - col_zero[j];
            }
        }

        return diff;
    }
};
728x90
반응형