TIL

[코테연습] 451. Sort Characters By Frequency

크라00 2024. 6. 19. 14:02

 


- 자주 반복되는 문자열 순으로 문자열을 정렬하여 출력하는 문제
- 같은 반복일 경우에는 순서는 상관하지 않는다.

1. Map<String, Integer> 선언
2. map 을 통해 같은 문자가 있는 경우를 hash 로 구분하여 count 한다.
3. String[] 배열을 선언하여, 같은 length 의 경우 같은 배열 index에 string 을 합친다.
4. String[] 배열을 역순으로 반복하여, String 변수에 담아 리턴한다.

class Solution {
    public String frequencySort(String s) {
        
        Map<String, Integer> map = new HashMap<>();

        int max = 0;
        String[] arr = s.split("");
        for(int i = 0; i < arr.length; i++) {
            String str = arr[i];
            int count = map.getOrDefault(str, 0);
            max = Math.max(max, count+1);
            map.put(str, count+1);
        }
        String[] strArr = new String[max];
        for(String key : map.keySet()) {
            int num = map.get(key);
            
            StringBuilder sb = new StringBuilder();
            for(int i = 0; i < num; i++) {
                sb.append(key);
            }
            String rs = sb.toString();

            strArr[num-1] = strArr[num-1] != null ? strArr[num-1]+rs : ""+rs;
        }

        StringBuilder sb = new StringBuilder();
        for(int i = strArr.length-1; i >= 0; i--) {
            sb.append(strArr[i] == null ? "" : strArr[i]);
        }
        String result = sb.toString();
        return result;
    }
}