Difference Between Ones and Zeros in Row and Column

유승선 ·2022년 12월 20일
1

LeetCode

목록 보기
61/112
post-thumbnail

마지막으로 코테 준비하면서 문제 풀었던게 10월 쯤이여서 진짜 놀랐다...시간이 이렇게 흐르다니.. 확실히 취업하면은 좀 소홀해 지는거는 사실인가 보다. 그래도 최근에는 나름 자극도 받아서 내가 정말 즐기고 좋아했던 리트코드 문제 위주로 DP랑 트리 / 그래프쪽 문제를 마스터할 생각이다. 자바 역량을 개인적으로 키우고 싶어서 일부러 자바로 풀이를 했다. 그렇다고 모든 코테를 자바로 볼 생각은 없고 제일 익숙한 C++로 볼 생각이라 앞으로 풀이는 두가지로 올릴거 같다 (시간은 더 오래걸리겠지만..ㅠㅠ)

자바 문법은 스프링과 웹 개발을 하면서 필수적으로 알아야하는 언어고 이번에 문제를 풀어보면서 코테 풀이 능력이 한참 취준할때보다 떨어졌다는 생각이 들어서 마음이 아팠다. 조금 조잡하게 푼 문제지만 부끄러워도 올려본다. 배운점은 자바를 제대로 배울려면 스트림을 제대로 알아야겠다.

//자바 풀이 
class Solution {
    public int[][] onesMinusZeros(int[][] grid) {
        List<List<Integer>> forCols = new LinkedList<>(); 
        List<List<Integer>> forRows = new LinkedList<>(); 
        List<List<Integer>> answer = new LinkedList<>(); 

        for(int i = 0; i < grid[0].length; i++){
            int zeroCnt = 0, onesCnt = 0; 
            for(int j = 0; j < grid.length; j++){
                if(grid[j][i] == 0) zeroCnt++; 
                else onesCnt++; 
            }
            List<Integer> tmp = new LinkedList<>(); 
            tmp.add(onesCnt); 
            tmp.add(zeroCnt); 
            forCols.add(tmp); 
        }

        for(int i = 0; i < grid.length; i++){
            int zeroCnt = 0, onesCnt =0; 
            for(int j = 0; j < grid[0].length; j++){
                if(grid[i][j] == 0) zeroCnt++;
                else onesCnt++; 
            }
            List<Integer> tmp = new LinkedList<>(); 
            tmp.add(onesCnt); 
            tmp.add(zeroCnt); 
            forRows.add(tmp); 
        }

        for(List<Integer> container : forRows){
            List<Integer> tmpContainer = new LinkedList<>(); 
            for(List<Integer> tmp : forCols){
                int val = container.get(0) + tmp.get(0) - container.get(1) - tmp.get(1); 
                tmpContainer.add(val); 
            }
            answer.add(tmpContainer); 
        }
        
        return answer.stream().map(l -> l.stream().mapToInt(Integer::intValue).toArray()).toArray(int[][]::new); 
    }
}
//c++
class Solution {
public:
    vector<vector<int>> onesMinusZeros(vector<vector<int>>& grid) {
        vector<pair<int,int>> forRows, forCols; 
        vector<vector<int>> answer; 

        for(int i = 0; i < grid[0].size(); i++){
            int zeroCnt = 0, onesCnt = 0; 
            for(int j = 0; j < grid.size(); j++){
                if(grid[j][i] == 0) zeroCnt++;
                else onesCnt++; 
            }
            forCols.push_back({onesCnt,zeroCnt}); 
        }

        for(int i = 0; i < grid.size(); i++){
            int zeroCnt = 0, onesCnt = 0; 
            for(int j = 0; j < grid[0].size(); j++){
                if(grid[i][j] == 0) zeroCnt++;
                else onesCnt++; 
            }
            forRows.push_back({onesCnt,zeroCnt}); 
        }

        for(pair<int,int> first : forRows){
            vector<int> tmp; 
            for(pair<int,int> second : forCols){
                tmp.push_back(first.first + second.first - first.second - second.second); 
            }
            answer.push_back(tmp); 
        }

        return answer; 
    }
};
profile
성장하는 사람

2개의 댓글

comment-user-thumbnail
2022년 12월 22일

풀이를 두개나 하시다니.. 존경합니다^^

1개의 답글