본문 바로가기
TIL

[코테연습] 2191. Sort the Jumbled Numbers

by 크라00 2024. 7. 24.

- 배열, 정렬 문제

 

https://leetcode.com/problems/sort-the-jumbled-numbers/description/?envType=daily-question&envId=2024-07-24

 

- 문제분석

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;
    }
}