- 배열, 정렬 문제
- 문제분석
1. 숫자가 담긴 int[] 배열이 있다.
2. 숫자를 매핑하는 int [] mapping 배열은 map[i] = j; 에 대응한다.
3. 즉, int[] nums = { 338, 38, 991 } 숫자를 mapping 배열에 매핑하여 변경하면 int[] nums = { 7, 7, 669 } 로 변경된다.
4. 이때 오름차순으로 매핑한 nums 를 정렬하여 출력해라.
- 문제풀이
1. nums 배열을 for문으로 반복한다.
2. nums 배열의 숫자를 문자로 변경한다.
3. 문자로 변경한 숫자를 String.charAt(i) 을 사용하여 char 단위로 나눈다.
4. mapping 에 해당하는 숫자를 구한다.
5. 해당 숫자를 String 으로 변경하여 나열하고 다시 숫자로 파싱한다.
6. 파싱된 숫자를 value로, 파싱 이전의 숫자를 key 로하여 Map<Integer, Integer> 을 만든다.
7. nums 를 sort() 함수로 정렬할때, map 에 있는 기준의 숫자로 정렬하게 new Compartor() 을 오버라이딩한다.
class Solution {
public int[] sortJumbled(int[] mapping, int[] nums) {
Map<Integer, Integer> map = new HashMap<>();
for(int i = 0; i < nums.length; i++) {
String str = String.valueOf(nums[i]);
//change
StringBuilder builder = new StringBuilder();
for(int j = 0; j < str.length(); j++) {
char c = (char)((int)str.charAt(j) - (int)'0');
int mappedNum = mapping[c];
builder.append(mappedNum);
}
int changedNum = Integer.parseInt(builder.toString());
map.put(nums[i], changedNum);
}
int[] sortedNums = Arrays.stream(nums)
.boxed()
.sorted((o1, o2) -> map.get(o1) - map.get(o2))
.mapToInt(Integer::intValue).toArray();
return sortedNums;
}
}
'TIL' 카테고리의 다른 글
[코테연습] 2441. Largest Positive Integer That Exists With Its Negative (0) | 2024.07.29 |
---|---|
[코테연습] 2000. Reverse Prefix of Word (0) | 2024.07.25 |
[코테연습] 1636. Sort Array by Increasing Frequency (2) | 2024.07.23 |
[코테연습] 2418. Sort the People (0) | 2024.07.22 |
[코테연습] 1605. Find Valid Matrix Given Row and Column Sums (0) | 2024.07.20 |