개발 로그/알고리즘

leetcode) 1282. Group the People Given the Group Size They Belong To c++

CyberSoak 2021. 9. 21. 15:03

🔑 3가지 주안점.

//map에 데이터 넣을때
m.insert(pair<int,int>(groupSizes[i],i));
//key find했을 때, 아무것도 없으면, m.end()를 return한다.
if(m.find(i)!=m.end()){
//m.equal_range(i).first ~ m.equal_range(i).second : first에는 begin값, second에는 end값이 있다.
for (auto it= m.equal_range(i).first; it!=m.equal_range(i).second; ++it){
//it의 data를 return.
v.push_back(it->second);

 

👉 전체 코드 내용

class Solution {
public:
    vector<vector<int>> groupThePeople(vector<int>& groupSizes) {
        multimap<int,int> m;
        vector<vector<int>>res;
        for(int i =0; i< groupSizes.size();i++){
            m.insert(pair<int,int>(groupSizes[i],i));
        }
        for (int i= 0 ; i <=groupSizes.size(); i++){
            if(m.find(i)!=m.end()){
                int tmpcnt=0;
                vector<int>v;
                for (auto it= m.equal_range(i).first; it!=m.equal_range(i).second; ++it){
                    v.push_back(it->second);
                    ++tmpcnt;
                    if(tmpcnt==i){
                        res.push_back(v);
                        v.clear();
                        tmpcnt=0;
                    }
                }
            }
        }
        return res;
    }
};