Krononberg

1030. Matrix Cells in Distance Order.cpp 본문

개발 로그/알고리즘

1030. Matrix Cells in Distance Order.cpp

k._. 2021. 11. 19. 11:30

⭐ discussion에서 배운 것, 두 가지.

res.push_back({d,d,d,d,d,d,d,d});

sort(res.begin(), res.end(), []vector<int>a,vector<int>b);

 

//multimap 나의 풀이

class Solution {
public:
    vector<vector<int>>res;
    
    vector<vector<int>> allCellsDistOrder(int rows, int cols, int rCenter, int cCenter) {
        
        multimap<int,vector<int>>m;
        
        for(int i =0; i<rows; i++){
            for(int j =0; j<cols; j++){
                vector<int>tmp;
                tmp.push_back(i);
                tmp.push_back(j);     
                m.insert(pair<int,vector<int>>(abs(rCenter-i)+abs(cCenter-j),tmp));
            }
        }
        
        for(auto it : m){
            res.push_back(it.second);
        }
        
        return res;   
            
    }
};



//discusstion 풀이
class Solution {
public:
    vector<vector<int>> allCellsDistOrder(int R, int C, int r0, int c0) {
        vector<vector<int>> ans;
        for (int i = 0; i < R; i++)
            for (int j = 0; j < C; j++)
                ans.push_back({i, j, abs(i - r0) + abs(j - c0)});

        sort(ans.begin(), ans.end(), [](vector<int>& c1, vector<int>& c2) {
            return c1[2] < c2[2];
        });

        for (vector<int>& d: ans) 
            d.pop_back();

        return ans;
    }
};