개발 일지
1636. Sort Array by Increasing Frequency (빈도 증가에 따른 배열 정렬) 본문
코딩 테스트/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합니다.
'코딩 테스트 > LeetCode' 카테고리의 다른 글
1566. Detect Pattern of Length M Repeated K or More Times (길이 M의 패턴이 K번 이상 반복되는 것을 감지합니다.) (1) | 2024.10.28 |
---|---|
1629. Slowest Key (가장 느린 키) (1) | 2024.10.21 |
1785. Minimum Elements to Add to Form a Given Sum (주어진 합을 형성하기 위해 더해야 할 최소 요소) (0) | 2024.10.18 |
1732. Find the Highest Altitude (가장 높은 고도를 찾아보세요) (5) | 2024.10.18 |
1738. Find Kth Largest XOR Coordinate Value (K번째로 큰 XOR 좌표 값 찾기) (0) | 2024.10.18 |