import java.util.*;
class Solution {
public int[] solution(String msg) {
HashMap<String,Integer> hm = new HashMap<>();
// <문자열,색인번호>
ArrayList<Integer> zipped = new ArrayList<>();
// 압축 결과인 색인번호 리스트
for(char c='A';c<='Z';c++) {
hm.put(String.valueOf(c),c-'A'+1);
}
// 기본 사전 초기화
int idx = 27;
while(!msg.isEmpty()) {
String w="";
int i=1;
for(;i<=msg.length();i++) {
if(hm.containsKey(msg.substring(0,i))) {
w = msg.substring(0,i);
}else {
hm.put(msg.substring(0,i),idx++);
break;
}
}
zipped.add(hm.get(w));
msg = msg.substring(i-1);
}
int[] answer = new int[zipped.size()];
for(int i=0;i<answer.length;i++) {
answer[i] = zipped.get(i);
}
return answer;
}
}
int idx
: 사전에 넣을 때 쓰일 색인 번호. 현재 26까지 들어가있으므로 27부터 시작while 문이 사전에서 현재 입력과 일치하는 가장 긴 w를 찾는 과정이다.