프로그래머스 신규 아이디 추천 코딩테스트연습

김영신·2022년 4월 13일
0
post-thumbnail
class Solution {
    public String solution(String new_id) {
        String answer = new_id.toLowerCase();

1단계 new_id의 모든 대문자를 대응되는 소문자로 치환합니다.
String 클래스의 toLowerCase() 메서드를 사용하면 모든 문자열이 소문자로 치환된다.

        answer = answer.replaceAll("[^a-z0-9-_.]","");

2단계 newid에서 알파벳 소문자, 숫자, 빼기(-), 밑줄(), 마침표(.)를 제외한 모든 문자를 제거합니다.
정규표현식을 사용하여 replaceAll을 하게 되면 해당 문자를 제외하고 모든 문자가 ""으로 치환된다.
괄호 안에 Hat표시(^)는 NOT이라는 의미이다.

        answer = answer.replaceAll("[.]+", ".");

3단계 new_id에서 마침표(.)가 2번 이상 연속된 부분을 하나의 마침표(.)로 치환합니다.
이 또한 정규표현식으로 해결한다.
정규 표현식에서 +의 의미는 []안에 있는 문자가 1개이상 혹은 더 있을 수 있다 라는 뜻이다.
정규 표현식에서 |의 의미는 OR의 의미와 같다.

        answer = answer.replaceAll("^[.]|[.]$", "");

4단계 new_id에서 마침표(.)가 처음이나 끝에 위치한다면 제거합니다.
이 또한 정규표현식으로 해결한다.
[] 밖에서의 ^은 문자열의 시작이라는 말과 같다.

ex) (문자열의 시작) hi        ==       "^hi"

반대로 $는 문자열의 마지막을 뜻한다.

ex) hi (문자열의 마지막)        ==       "hi$"

        if(answer.equals("")) answer = "a";

5단계 new_id가 빈 문자열이라면, new_id에 "a"를 대입합니다.

        if(answer.length() >= 16){
            answer = answer.substring(0,15);
            answer = answer.replaceAll("\\.$", "");
        }

6단계 new_id의 길이가 16자 이상이면, new_id의 첫 15개의 문자를 제외한 나머지 문자들을 모두 제거합니다.
만약 제거 후 마침표(.)가 new_id의 끝에 위치한다면 끝에 위치한 마침표(.) 문자를 제거합니다.
마찬가지로 제거한 문자열의 끝부분에 .이 있다면 제거한다.

        if(answer.length() <= 2){
            String lastchar = answer.substring(answer.length() - 1);
            for (int i = answer.length(); i < 3; i++){
                answer = answer.concat(lastchar);
            }
        }
        return answer;
    }
}

7단계 new_id의 길이가 2자 이하라면, new_id의 마지막 문자를 new_id의 길이가 3이 될 때까지 반복해서 끝에 붙입니다.

profile
어제보다 오늘 더 Developer

0개의 댓글