Krononberg

861. Score After Flipping Matrix.cpp 본문

개발 로그/알고리즘

861. Score After Flipping Matrix.cpp

k._. 2021. 10. 12. 22:07

첫 greedy 문제

class Solution {
public:
    
    void flipRow(vector<vector<int>>& grid,int m){
        for(int j =0; j<grid[0].size();j++){
            grid[m][j]^=1;
        }
    }   
    
    
    void flipCol(vector<vector<int>>& grid, int n){
        for(int i =0; i<grid.size(); i++){
            grid[i][n]^=1;
        }   
    }
    
    int gridSum(vector<vector<int>>& grid){
        int res =0;
        for(int i=0; i<grid.size(); i++){
            for(int j =0; j<grid[0].size(); j++){
                if(grid[i][j]==1)
                    res += pow(2,grid[0].size()-j-1);
            }
        }
        return res;
    }
    

    int matrixScore(vector<vector<int>>& grid) {
        int m = grid.size();
        int n = grid[0].size();
        if (grid.size()==1) return 1;
        
        for(int i =0; i<m; i++){
            if(grid[i][0]!= 1){
                flipRow(grid,i);
            }
        }
        
        for(int j=1; j<n; j++){
            int one =0;
            int zero =0;
            for(int i =0; i<m; i++){
                if(grid[i][j]==1)one++;
                else zero++;
            }
            if(one < zero) {
                flipCol(grid,j);
            }
        }
        
        return gridSum(grid);

        
    }
};