728x90
300x250
programmers.co.kr/learn/courses/30/lessons/17684
60분 소요
현재입력 w와 다음에 들어올 c를 어떻게 분배할지 고민했는데,
다음에 들어오는 c는 무조건 하나씩 입력이 되며 출력되면 w를지워버리기때문에 startsWith를 통해서 w는 앞에서부터 그냥 긴 문자열이 있으면 처리해주면 된다.
import java.util.*;
class Solution {
public static int idx = 1;
public static int[] answer = {};
public static ArrayList<Integer> list = new ArrayList<Integer>();
public static HashMap<String,Integer> map = new HashMap<String,Integer>();
public int[] solution(String msg) {
//A~Z사전 생성
while(idx<=26) {
map.put(String.valueOf((char)('A'+idx-1)) , idx++ );
// idx++;
}
solve(msg);
answer = new int[list.size()];
for(int i = 0 ; i< list.size();i++){
answer[i]=list.get(i);
}
return answer;
}
public void solve(String msg) {
if(msg.isEmpty())
return;
String w = "";
String c = "";
int max = Integer.MIN_VALUE;
// 사전에서 현재 입력과 일치하는 가장 긴문자열 찾기
for(String key : map.keySet()){
if(msg.startsWith(key)){
max = Math.max(max, key.length());
w = (max == key.length() ? key : w);
}
}
// 색인 번호 출력
list.add(map.get(w));
//w 제거
msg = msg.replaceFirst(w,"");
//글자가 남아있는가?
if(msg.length()>0){
c = msg.substring(0,1);
map.put(w+c, idx++);
}
solve(msg);
}
}
728x90
'알고리즘 > 문자열' 카테고리의 다른 글
백준 1181번: 단어 정렬 [문자열][정렬] -Java (0) | 2023.06.19 |
---|---|
백준 1543번: 문서 검색 [문자열][브루트포스][Java] (0) | 2023.02.15 |
프로그래머스[Level2] - 괄호 변환 [문자열][2020 KAKAO BLIND RECRUITMENT] - Java (0) | 2020.09.12 |
프로그래머스[Level2] - 오픈채팅방 [문자열][2019 KAKAO BLIND RECRUITMENT] - Java (0) | 2020.09.11 |
프로그래머스[Level2] - 튜플 [문자열][2019 카카오 개발자 겨울 인턴십] - Java (0) | 2020.09.11 |