개발 로그/알고리즘

1356. Sort Integers by The Number of 1 Bits.cpp

CyberSoak 2021. 11. 7. 16:13

 

🔑 제한사항에서 arr원소 최대값이 10000이하 이므로, 2^14를 넘지 않는다. 따라서, 2진법 전환시에, 1의 개수도 14개 이하이다. 고로, 각 숫자의 루프를 돌면서, 1의 개수에 따라 분류하는 2차원 벡터 14개를 만든다. 저장한 후에, 순서대로 res에 넣어 주면 끝이다. (단, 1의 개수가 같은 경우에 오름차순을 지정해야하므로, sort한 이후에 res에 넣는다.)

 

⭐2차원 벡터 초기화 방법

vector<vector<int>>v(2차원 벡터(row) 원소 개수,vector<int>(1차원 벡터(column) 원소 개수,0));

class Solution {
public:
    vector<int> sortByBits(vector<int>& arr) {
        vector<int>res;
        vector<vector<int>>v(14,vector<int>(0));
        
        for(int i =0; i<arr.size(); i++){
            int cnt =0;
            int tmp = arr[i];
            while(tmp!=0){
                if((tmp%2)==1) cnt++;
                tmp/=2;
            }
            v[cnt].push_back(arr[i]);
        }
        
        for(int i =0; i< v.size(); i++){
            for(int j =0; j< v[i].size(); j++){
                sort(v[i].begin(),v[i].end());
                res.push_back(v[i][j]);
            }
        }
        
        return res;
    }
};