+1 2021 KAKAO BLIND RECRUITMENT 신규 아이디 추천

이동한·2023년 6월 14일
0

알고리즘 기출

목록 보기
8/22
class Solution {
    
    public String solution(String new_id) {
        String answer = regexRefined(new_id);
        return answer;
    }
    
    /**
    정규 표현식 사용하지 않고 규칙을 구현
    */
    public String refinedData(String data){
        StringBuilder sb = new StringBuilder();
         // stage 1
        data = data.toLowerCase();
        // stage 2 
        for(int i=0; i<data.length(); i++){
            char cur = data.charAt(i);
            if((cur>='a' && cur<='z') || (cur>='0' && cur<='9') || cur == '-' || cur == '_' || cur=='.' ){
                sb.append(cur);
            }
        }
        data = sb.toString();
        sb.setLength(0); // StringBuilder 초기화
        // stage 3
        while(data.contains("..")){
            data = data.replace("..",".");
        }
        // stage 4
        if(data.length()>0){
            if(data.charAt(0) == '.'){
                data = data.substring(1);
            }
        }
        if(data.length()>0){
            if(data.charAt(data.length()-1) == '.')
            {data = data.substring(0, data.length()-1);}
        }
        // stage 5
        if(data.equals("")){
            data = "a";
        }
        // stage 6
        if(data.length()>15){
            data = data.substring(0,15);
            if(data.charAt(data.length()-1) == '.'){
                data = data.substring(0,data.length()-1);
            }
        }
        // stage 7
        sb = new StringBuilder(data);
        while(sb.length()<3){
            sb.append(data.charAt(data.length()-1));
        }
        data = sb.toString();
        return data;
        // StringBuilder reinitializing = sb.setLength(0);
    }
    
    /**
    정규 표현식을 이용하여 문자열 구현
    */
    public String regexRefined(String data){
        StringBuilder sb = new StringBuilder();
         // stage 1
        data = data.toLowerCase();
        
        // stage 2
        data = data.replaceAll("[^-_.a-z0-9]","");
        
        // stage 3
        data = data.replaceAll("[.]{2,}",".");
        
        // stage 4
        data = data.replaceAll("^[.]|[.]$", "");
        
        // stage 5
        if(data.equals("")){
            data+="a";
        }
        
        // stage 6
        if(data.length()>15){
            data = data.substring(0,15);
            if(data.charAt(data.length()-1) == '.'){
                data = data.substring(0,data.length()-1);
            }
        }
        
        //stage 7
        sb.append(data);
        while(sb.length()<3){
            sb.append(data.charAt(data.length()-1));
        }
        data = sb.toString();
        return data;

    }
}

String.replace("target","원하는 값");
String.substring(int startIdx, int endIdx);
sb.replaceAll("정규 표현식","원하는 값");

두번째

class Solution {
    public String solution(String new_id) {
        // step 1
        String answer = new_id.toLowerCase();
        // step 2
        answer = answer.replaceAll("[^a-z0-9-_.]","");
        // step 3
        answer = answer.replaceAll("[.]{2,}",".");
        // step 4
        answer = answer.replaceAll("^[.]|[.]$","");
        //step 5
        if(answer.equals("")) answer = "a";
        //step 6
        if(answer.length()>=16) answer = answer.substring(0,15);
        answer = answer.replaceAll("[.]$","");
        // step 7 
        while(answer.length()<=2){
            answer += answer.charAt(answer.length()-1);
        }
        System.out.println(answer);
        return answer;
    }
}

String.replaceAll(a,b)에서 a에 정규표현식 가능하다.

profile
Pragmatic, Productive, Positivist

0개의 댓글