[프로그래머스] 2021 카카오 신규 아이디 추천

AI·2025년 10월 6일
class Solution {
    public String solution(String new_id) {
        // 틀리면 유사한 아이디 추천
        // 정규식
        // 3~15자
        // 알파벳 소문자, 숫자, 빼기(-), 밑줄(_), 마침표(.)
        // 마침표(.)는 처음과 끝에 사용할 수 없으며 또한 연속으로 사용할 수 없음
        
        // 소문자로 치환
        // 가능한 문자 아니면 제거
        // 마침표 1개로 설정 + 첨이나 끝이면 삭제
        // 빈 거면 a, 16부터는 삭제 => 마지막 마침표면 삭제
        // 마지막 문자 반복
        new_id = new_id.toLowerCase();
        
        // String pattern = "w|'-'|'_'|'.'";
        
//         for(int i=0;i<new_id.length();i++){
//             char now = new_id.charAt(i);
//             if(!Pattern.matches(pattern, now) || (i+1<new_id.length() && now == '.' && new_id.charAt(i+1)=='.') ){
//                 new_id = new_id.subString(0,i)+new_id.subString(i+1);
//                 i--;
//             } 
                
//             }
        new_id = new_id.replaceAll("[^a-z0-9-_.]", "");
        
        new_id = new_id.replaceAll("\\.{2,}",".");
        
        if(!new_id.isEmpty() && new_id.charAt(0)=='.'){
            new_id = new_id.substring(1);
        }
        if(!new_id.isEmpty() && new_id.charAt(new_id.length()-1)=='.'){
            new_id = new_id.substring(0,new_id.length()-1);
        }
        
        if(new_id.isEmpty()){
            new_id = "a";
        }
        
        if(new_id.length()>=16){
            new_id = new_id.substring(0,15);
            if(new_id.charAt(new_id.length()-1)=='.')
                new_id = new_id.substring(0,14);
        }
        
        if(new_id.length()<=2){
            while(true){
                if(new_id.length()==3) break;
                new_id = new_id+new_id.charAt(new_id.length()-1);
            }
        }
        
        return new_id;
    }
}

0개의 댓글