시키는데로 잘 풀면 된다.
내가 푼 방법의 핵심은 우선 스트링빌더에 다음 문자를 넣고 해당되는 값이 Map에 들어가있지 않으면 해당 값을 Map에 추가하여주는 동시에 List에 집어 넣어 준다. 시간복잡도는 아마도 O(N) 안에는 끝나지 않을까 싶다.
import java.util.*;
class Solution {
public int[] solution(String msg) {
int[] answer = {};
char[] charArr = msg.toCharArray();
List<Integer> list = new ArrayList<>();
Map<String,Integer> dic = new HashMap<>();
for(int i=0;i<27;i++) {
dic.put(Character.toString('A'+i),i+1);
}
int lastIndex = 27;
StringBuilder sb = new StringBuilder();
for(int i=0;i<msg.length();i++) {
char checkChar = charArr[i];
sb.append(checkChar);
if(dic.containsKey(sb.toString())) {
if(i==msg.length()-1) {
list.add(dic.get(sb.toString()));
break;
}
}
else if(!dic.containsKey(sb.toString())) {
i--;
dic.put(sb.toString(),lastIndex);
lastIndex++;
sb.deleteCharAt(sb.length()-1);
list.add(dic.get(sb.toString()));
sb = new StringBuilder();
}
}
answer = new int[list.size()];
for(int i = 0;i<list.size();i++) {
answer[i] = list.get(i);
}
return answer;
}
}
'문제풀이' 카테고리의 다른 글
[LeetCode] 187. Repeated DNA Sequences Java (0) | 2021.06.18 |
---|---|
[Leetcode] Game of Life Java (0) | 2021.06.18 |
[백준] 퇴사2 Java (0) | 2021.04.15 |
[프로그래머스] 2019 카카오 인턴십 4번 문제 징검다리 건너기 Java (0) | 2021.04.15 |
[프로그래머스] 네트워크 Java (0) | 2021.04.13 |