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

Choi Seong Jin·2022년 11월 11일
0

프로그래머스

목록 보기
6/33

문제 링크 : 신규 아이디 추천


내 풀이

public String solution(String new_id) {
        String answer = "";
        int index = 0;
        //1단계
        new_id = new_id.toLowerCase(Locale.ROOT);

        //2단계
        while(index < new_id.length()){
            if(!((new_id.charAt(index) >= '0' && new_id.charAt(index) <= '9') ||
                    (new_id.charAt(index) >= 'a' && new_id.charAt(index) <= 'z') || new_id.charAt(index) == '-' ||
                    new_id.charAt(index) == '_' || new_id.charAt(index) == '.')){
                new_id = new_id.substring(0,index) + new_id.substring(index+1);
            }else {
                index++;
            }
        }

        //3단계
        while(new_id.contains("..")){
            new_id = new_id.replaceAll("\\.\\.", "\\.");
        }

        //4단계
        if(new_id.charAt(0) == '.'){
            new_id = new_id.substring(1);
        }
        if(new_id.length() > 0 && new_id.charAt(new_id.length()-1) == '.'){
            new_id = new_id.substring(0, new_id.length()-1);
        }

        //5단계
        if(new_id.equals("")){
            new_id = "a";
        }

        //6단계
        if(new_id.length() > 15){
            new_id = new_id.substring(0,15);
            if(new_id.charAt(new_id.length()-1) == '.'){
                new_id = new_id.substring(0, new_id.length()-1);
            }
        }

        //7단계
        if(new_id.length() <= 2){
            int length = new_id.length();
            do{
                new_id += new_id.charAt(length-1);
            }while(new_id.length() < 3);
        }

        return new_id;
    }

코드를 보면 알겠지만, 내 풀이는 문제에서 제시한 조건들을 Java 코드들로 구현한 것이다.

이것이 출제자가 의도한 풀이가 맞는지 문제를 풀면서 계속 의심했지만, 다른 방법이 도저히 생각나지 않아서 일단은 풀고, 다른 사람들의 풀이를 참고하려고 했다.

문제를 푼 이후에 다른 사람들의 풀이를 보니, 학부에서 처음 배웠을 때는 별다른 쓰임새를 잘 모르겠던 정규 표현식을 사용해서 문제를 간단하게 푼 것을 확인할 수 있었다.

다른 사람의 풀이

public String solution(String new_id) {
        String answer = "";
        String temp = new_id.toLowerCase();

        temp = temp.replaceAll("[^-_.a-z0-9]","");
        System.out.println(temp);
        temp = temp.replaceAll("[.]{2,}",".");
        temp = temp.replaceAll("^[.]|[.]$","");
        System.out.println(temp.length());
        if(temp.equals(""))
            temp+="a";
        if(temp.length() >=16){
            temp = temp.substring(0,15);
            temp=temp.replaceAll("^[.]|[.]$","");
        }
        if(temp.length()<=2)
            while(temp.length()<3)
                temp+=temp.charAt(temp.length()-1);

        answer=temp;
        return answer;
    }

내가 푼 풀이에 비하면 코드가 훨씬 간결해졌다. 풀이할 때 알고리즘적인 생각에만 몰두했었는데, 문자열을 다루는 문제가 나오면 정규 표현식도 조금 더 공부해서 사용해봐야겠다는 생각이 들었다.

profile
백엔드 개발자 지망생입니다!

0개의 댓글