마지막으로 코테 준비하면서 문제 풀었던게 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;
}
};
풀이를 두개나 하시다니.. 존경합니다^^