본문 바로가기

Programmers/Level2

[3차] 압축

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
import java.util.*;
class Solution {
    public int[] solution(String msg) {
        int[] answer = {};
        Map<String, Integer> map = new HashMap<String, Integer>();
        List<Integer> list = new ArrayList<Integer>();
 
        int i = 1, j = 0;
        char c = 'A';
        // 알파벳 초기화
        while (c <= 'Z')
            map.put(Character.toString(c++), i++);
 
        while (j < msg.length()) {
            StringBuilder sb = new StringBuilder();
            // 뒷 글자까지 키에 포함되는지 확인
            while (j + 1 <= msg.length() && map.containsKey(sb.toString() + msg.substring(j, j + 1))) {
                sb.append(msg.substring(j, j + 1));
                j++;
            }
            
            // 마지막 문자일 경우
            if (j == msg.length()) {
                list.add(map.get(sb.toString()));
            } else {
                list.add(map.get(sb.toString()));
                map.put(sb.toString() + msg.substring(j, j + 1), i++);
            }
        }
        answer = list.stream().mapToInt(Integer::intValue).toArray();
        return answer;
    }
}
cs

Hashmap과 ArrayList를 사용하였다.

'Programmers > Level2' 카테고리의 다른 글

adenCase 문자열 만들기  (0) 2021.08.06
순위 검색  (0) 2021.08.06
2개 이하로 다른 비트  (0) 2021.08.06
행렬의 곱셈  (0) 2021.08.05
[3차] 방금그곡  (0) 2021.08.04