개발 로그/알고리즘
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;
}
};