주어진 숫자 배열 nums를 이진수로 변환했을 때, 이진수에서 1의 개수에 따라 오름차순으로 정렬하는 프로그램을 작성합니다. 1의 개수가 같은 경우는 원래 숫자의 크기가 작은 순서대로 정렬합니다.
예시: nums = [5, 6, 7, 8, 9]는 [8, 5, 6, 9, 7]로 정렬됩니다.
제한사항:
nums의 길이는 최대 1,000입니다.
nums의 각 요소는 1 이상 100,000 이하입니다.
package inflearn_231117;
import java.util.*;
class Solution3 {
public int[] solution(int[] nums){
int[] answer = new int[nums.length];
List<List<Integer>> numLists = new ArrayList<>();
for(int i=0;i<nums.length;i++) {
List<Integer> numList = new ArrayList<>();
numList.add(nums[i]);
int temp = nums[i];
int count=0;
while(temp!=0) {
if(temp%2==1)
count++;
temp/=2;
}
numList.add(count);
numLists.add(numList);
}
answer = numLists.stream().sorted((f1,f2)->f1.get(0)-f2.get(0))
.sorted((n2,n3)->n2.get(1)-n3.get(1))
.map(n4->n4.get(0))
.mapToInt(Integer::intValue)
.toArray();
return answer;
}
public static void main(String[] args){
Solution3 T = new Solution3();
System.out.println(Arrays.toString(T.solution(new int[]{5, 6, 7, 8, 9})));
System.out.println(Arrays.toString(T.solution(new int[]{5, 4, 3, 2, 1})));
System.out.println(Arrays.toString(T.solution(new int[]{12, 5, 7, 23, 45, 21, 17})));
}
}