import java.util.*;
class Solution {
public int[] solution(String[] keymap, String[] targets) {
int[] answer = new int[targets.length];
for(int j=0; j<targets.length; j++){
String target = targets[j];
int count = 0;
for(int i=0; i<target.length(); i++){
char c = target.charAt(i);
List<Integer> idxList = new ArrayList<>();
for(String key : keymap){
//각 키를 뒤져서 인덱스 번호가 작은 것을 채택
int idx = key.indexOf(c+"");
if(idx == -1){
continue;
} else {
idxList.add(idx);
}
}
if(idxList.size()==0){
count = -1;
break;
} else {
int min = Collections.min(idxList);
count += (min+1);
idxList.clear();
}
}
answer[j] = count;
}
return answer;
}
}
: 순서대로 문제에 제시된대로 구현했다.
2단계, 3단계에서 정규식 좀 찾아봄.
matches() 메서드 사용했다가 잘 안 되길래, replaceAll() 메서드 사용.
다른 사람 풀이 보니까, 앞뒤 . 제거하는 것도 정규표현식으로 깔끔하게 푼 사람이 있어서 인상적이었다.
그리고 클래스 하나 파서, 메서드 다 추출한 사람도 깔끔했음. 가장 자바다운,,
class Solution {
public String solution(String new_id) {
String answer = "";
//1단계
new_id = new_id.toLowerCase();
//2단계
new_id = new_id.replaceAll("[^a-z0-9-_.]", "");
//3단계
new_id = new_id.replaceAll("[.]{2,1000}", ".");
//4단계
int len = new_id.length();
if(len > 0 && new_id.charAt(0) == '.'){
new_id = new_id.substring(1);
}
len = new_id.length();
if(len > 0 && new_id.charAt(len - 1) =='.'){
new_id = new_id.substring(0, len - 1);
}
//5단계
if(new_id.length()==0){
new_id = "a";
}
//6단계
if(new_id.length()>15){
new_id = new_id.substring(0, 15);
}
if(new_id.length() == 15 && new_id.charAt(14) =='.'){
new_id = new_id.substring(0, 14);
}
//7단계
while(true){
if(new_id.length()<=2){
new_id += new_id.charAt(new_id.length()-1);
} else {
break;
}
}
return new_id;
}
}