- 배열 / 해시테이블 / 정렬 문제
- 문제분석
1. int[] arr 에 랜덤한 숫자가 담겨있다.
2. 해당 숫자를 Rank 로 가장 작은 순서대로 랭킹 번호를 매긴다.
3. 랭킹 번호를 int[] 로 리턴한다.
4. 동일한 번호일 경우, 동일한 랭킹번호로 출력한다.
- 문제풀이
1. int[] arr 의 숫자를 set 으로 중복을 제거한다.
1-1. set 초기화는 TreeSet 으로 하여 정렬할 수 있도록한다.
2. 오름차순으로 정렬된 set 을 map 에 담는다.
2-1. key는 원래 숫자로, value 는 순서 ( 등급 ) 을 담는다.
3. 다시 int[] arr 를 반복문으로 반복한다.
3-1. int[] rank 배열에는 map.get(arr[i]) 로하여, 등급을 순서대로 담아 리턴한다.
class Solution {
public int[] arrayRankTransform(int[] arr) {
TreeSet<Integer> set = new TreeSet<>((o1, o2)->o1.compareTo(o2));
for (int num : arr) {
set.add(num);
}
Map<Integer, Integer> map = new HashMap<>();
int idx = 1;
for(int num : set) {
map.put(num, idx++);
}
int[] rs = new int[arr.length];
int i = 0;
for (int num : arr) {
rs[i++] = map.get(num);
}
return rs;
}
}
'TIL' 카테고리의 다른 글
[코테연습] 2696. Minimum String Length After Removing Substrings (0) | 2024.10.07 |
---|---|
[코테연습] 2491. Divide Players Into Teams of Equal Skill (0) | 2024.10.04 |
[코테연습] 729. My Calendar I (0) | 2024.09.26 |
[코테연습] 2416. Sum of Prefix Scores of Strings (0) | 2024.09.25 |
[코테연습] 3043. Find the Length of the Longest Common Prefix (0) | 2024.09.24 |