import java.util.*;
class Solution {
public String solution(String new_id) {
String answer = "";
answer = new_id.toLowerCase(); //1단계
answer = answer.replaceAll("[^-_a-z0-9.]",""); //2단계
answer = answer.replaceAll("[.]{2,}","."); //3단계
answer = answer.replaceAll("^[.]|[.]$",""); //4단계
if (answer.equals("")){ //5단계
answer = "a";
}
if (answer.length()>15){ //6단계
answer = answer.substring(0,14);
if (answer.substring(14).equals(".")){
answer = answer.replace("[.]","");
} }
if (answer.length()<3){ //7단계
do {
answer += answer.substring(answer.length());
} while (answer.length()<3);
}
return answer;
}
}
특히 2단계를 어떻게 해야할지 고민이 많았다. 조건문과 반복문을 사용하면 코드가 너무 길어질 것 같다고 생각했다. 그래서 다른 방법을 찾아보다가 알게 된 것이 '정규식' 인데, 정규식을 사용하니 실행 시간이 10초 이상으로 소요되어 프로그래머스로 부터 결과 값을 얻어올 수 없었다. 정규식 외에, 조건문과 반복문을 무분별하게 사용하는 것 외에 다른 방법이 있는지 찾아봐야겠다.
class Solution {
public String solution(String new_id) {
//1단계
new_id = new_id.toLowerCase();
//2단계
String[] specialCharArr = {"~","!","@","#","$","%","^","&","*","(",")","=","+","[","{","]","}",":","?",",","<",">","/"};
for(int i=0; i<specialCharArr.length; i++){
if(new_id.contains(specialCharArr[i])){
new_id = new_id.replace(specialCharArr[i],"");
}
}
//3단계
if(new_id.contains("..")){
do {
new_id = new_id.replace("..",".");
} while (new_id.contains(".."));
}
//4단계
if (new_id.indexOf(".")==0){
new_id = new_id.replaceFirst(".","");
}
if (new_id.lastIndexOf(".")==new_id.length()-1 && new_id.length()>=2){
new_id=new_id.substring(0,new_id.length()-1);
}
//5단계
if(new_id.length()<1){
new_id = "aaa";
}
//6단계
if(new_id.length()>=16){
new_id = new_id.substring(0,15);
}
if(new_id.lastIndexOf(".")==new_id.length()-1&&new_id.length()>=2){
new_id = new_id.substring(0,new_id.length()-1);
}
//7단계
if(new_id.length()<=2 && new_id.length()>0){
do{
new_id += new_id.charAt(new_id.length()-1);
}while(new_id.length()<3);
}
String answer = new_id;
return answer;
}
}