🖇️ 문제 링크
📝 문제 분석
해시맵으로 사전을 생성합니다.
- 'A' ~ 'Z'까지 먼저 사전을 초기화합니다.
- 사전에서 현재 입력과 일치하는 가장 긴 문자열을 찾습니다. ( substring으로 인덱스를 하나씩 늘리며 탐색 )
- 입력에서 처리되지 않은 다음 글자가 남아있다면, 지금까지 찾은 가장 긴 문자열에 다음 글자를 덧붙여 사전에 저장합니다.
⌨️ 코드
import java.util.*;
class Solution {
public static int[] solution(String msg) {
ArrayList<Integer> list = new ArrayList<>();
HashMap<String, Integer> map = new HashMap<>();
// A - Z까지 init
for(int i = 0; i < 26; i++)
map.put((char)('A' + i) + "", i + 1);
for(int i = 0; i < msg.length();) {
// map에 있는 가장 긴 값을 구하자
int end = i + 1;
while(end <= msg.length()) {
String sub = msg.substring(i, end);
if(map.containsKey(sub)) {
end++;
}
else {
list.add(map.get(msg.substring(i, end - 1)));
map.put(sub, map.size() + 1);
break;
}
}
if(end > msg.length())
list.add(map.get(msg.substring(i, end - 1)));
i = end - 1;
}
int[] ans = new int[list.size()];
for(int i = 0; i < list.size(); i++)
ans[i] = list.get(i);
return ans;
}
}
Uploaded by Notion2Tistory v1.1.0