[JAVA] 코딩테스트 : 신규 아이디 추천

준우·2021년 11월 25일
0

코딩 테스트

목록 보기
3/3

코딩테스트 : 신규 아이디 추천

문제

입출력 예

답변 코드

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;
        }
        
    }

실행 결과

오늘 배운 것 (2021-11-25)

특히 2단계를 어떻게 해야할지 고민이 많았다. 조건문과 반복문을 사용하면 코드가 너무 길어질 것 같다고 생각했다. 그래서 다른 방법을 찾아보다가 알게 된 것이 '정규식' 인데, 정규식을 사용하니 실행 시간이 10초 이상으로 소요되어 프로그래머스로 부터 결과 값을 얻어올 수 없었다. 정규식 외에, 조건문과 반복문을 무분별하게 사용하는 것 외에 다른 방법이 있는지 찾아봐야겠다.



통과된 풀이(2021-11-29)

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;
    }
}

0개의 댓글