🔗 문제 링크

https://programmers.co.kr/learn/courses/30/lessons/72410#


👨🏻‍💻 내가 작성한 코드

class Solution {
    public String solution(String new_id) {
        
        
        // 1단계. 모든 문자 소문자로 변환
        String str = new_id.toLowerCase();
        
        // 2단계. 알파벳, 숫자, -_.아니면 삭제
        str = str.replaceAll("[^a-z0-9-_.]","");
        
        
        // 3단계. (.)이 2개 이상이면 하나로 변경
        str = str.replaceAll("[.]{2,}",".");

        // 4단계. (.)으로 시작하거나 끝나면 (.)삭제
        str = str.replaceAll("^[.]","");
        str = str.replaceAll("[.]$","");
        
        // 5단계. 문자열이 비어있으면 a추가
        if (str.isEmpty())
            str = "a";
        
        // 6단계. string이 15자리 이상이면 뒤에 문자열 자르기
        if (str.length() > 15)
            str = str.replace(str.substring(15, str.length()), "");
        str = str.replaceAll("[.]$","");
                              
        // 7단계. string이 2자 이하면 맨 뒤의 문자로 3자리로 늘리기
        while (str.length() < 3){
            str += str.charAt(str.length()-1);
        }
        
        System.out.println(str);

        return str;
    }
}


📝 결론

문제를 풀 때 처음에는 연산에 사용되는 메모리양을 고려해서 StringBuilder를 사용할까 하였다. 하지만 StringBuilder에는 replace 메서드의 경우 index번호를 이용해서 변경해야하며 charAt과 같은 메서드가 없어서 오히려 구현이 더 힘들다 판단하고 정규식을 찾아 정규식을 사용하게 되었다. 정규식을 사용하면 Replace와 같은 것을 할 때 편리하다는 장점이 있으나 아직까지 많이 어려운 것 같다. 가끔마다 한번씩은 정규식 정리를 보며 익혀보면 좋을 것 같다.

profile
블로그 이전했습니다. -> https://seongwon.dev/

0개의 댓글