코딩 테스트/LeetCode
1636. Sort Array by Increasing Frequency (빈도 증가에 따른 배열 정렬)
포카리tea
2024. 10. 21. 12:13
정수 nums 배열이 주어지면 값의 빈도를 기준으로 배열을 증가하는 순서로 정렬합니다. 여러 값의 빈도가 같은 경우 감소하는 순서로 정렬합니다.
예시 1:
입력: nums = [1,1,2,2,2,3]
출력: [3,1,1,2,2,2]
설명: '3'의 빈도는 1, '1'의 빈도는 2, '2'의 빈도는 3입니다.
예시 2:
입력: nums = [2,3,1,3,2]
출력: [1,3,3,2,2]
설명: '2'와 '3'은 모두 빈도가 2이므로 감소하는 순서로 정렬됩니다.
예시 3:
입력: nums = [-1,1,-6,4,5,-6,1,4,1]
출력: [5,-1,4,4,-6,-6,1,1,1]
조건:
- 1 <= nums.length <= 100
- -100 <= nums[i] <= 100
정답:
public class Solution {
public int[] FrequencySort(int[] nums) {
List<Tuple<int, int>> resultTuple = new List<Tuple<int, int>>();
List<int> numsCopy = nums.OrderByDescending(n => n).ToList();
foreach (var num in numsCopy)
{
resultTuple.Add(new Tuple<int, int>(num, numsCopy.Count(n => n == num)));
}
List<Tuple<int, int>> result = new List<Tuple<int, int>>(resultTuple.OrderBy(n => n.Item2));
return result.Select(n => n.Item1).ToArray();
}
}
해설: 우선 빈도 순서대로 정렬하기 전에 빈도가 같을 때를 대비하여 감소하는 순서대로 정렬합니다.
그 후 정렬된 numsCopy를 resultTuple의 Item1에 기본값 Item2에 해당 값의 갯수, 즉 빈도를 넣습니다.
빈도가 모두 들어갔다면 해당 빈도를 기준으로 오름차순으로 정렬한 후 Item1값만 빼내어 return합니다.