프로그래머스-2021 KAKAO BLIND RECRUITMENT ( 신규 아이디 추천 by Java )

Flash·2022년 2월 12일
0

Programmers-Algorithm

목록 보기
27/52
post-thumbnail

정규 표현식

프로그래머스 2021 KAKAO BLIND RECRUITMENT Level 1 문제 신규 아이디 추천Java를 이용해 풀어보았다.
정규 표현식을 이용하면 간단하게 풀이가 가능하다. 이번 기회에 정규 표현식 중 기본적인 용법들을 배웠다.

문제 링크 첨부한다.
https://programmers.co.kr/learn/courses/30/lessons/72410


변환 단계별로 처리해주기

1단계 ( 대문자 -> 소문자 )

/** 1번 작업 */
answer = new_id.toLowerCase();

2단계 ( 조건에 안 맞는 문자 제거 )

/** 2번 작업 */
String match = "[^a-z\\d\\-_.]*";
answer = answer.replaceAll(match, "");

소문자, 숫자, '-', '_', '.' 를 제외하고는 모두 없애야 하므로 match를 선언해서 replaceAll() 메소드를 이용하면 된다.
^[] 안에 배치하면 not의 의미를 갖는다. 즉 [] 안에 있는 놈들 빼고 판별한다는 의미다.

3단계 ( 연속 '.' 를 단일 '.' 로 바꾸기 )

/** 3번 작업 */
match = "\\.{2,}";
answer = answer.replaceAll(match, ".");

특수문자를 표현할 때는 \\.와 같이 \를 연속해서 써줘야 하며, 몇 회 이상 반복되는지를 나타낼 때는 {n,} 와 같이 표현해서 n번 이상을 나타낸다.

4단계 ( '.'가 처음 혹은 끝에 있음 제거 )

/** 4번 작업 */
match = "^[.]|[.]$";
answer = answer.replaceAll(match, "");

^$는 각각 문자열의 시작점과 끝점을 나타낸다. 따라서 시작점에 있는 .와 끝점에 있는 .를 판별하게 된다.

5단계 ( 빈 문자열이면 'a' 넣어주기 )

/** 5번 작업 */
if(answer.isEmpty())    answer += "a";

6단계 ( 16자 이상이면 첫 15글자만 취함 )

/** 6번 작업 */
if(answer.length()>15)  answer = answer.substring(0, 15);
answer = answer.replaceAll("[.]$", "");

subString() 이용해서 잘라내고 끝에 .가 남아있을 경우를 대비해 제거해준다.

7단계 ( 2자 이하면 마지막 글자를 3자가 될 때까지 붙이기 )

/** 7번 작업 */
if(answer.length()<=2){
    char last = answer.charAt(answer.length()-1);
    while(answer.length()!=3)   answer += last;
}

위의 7단계를 다 거치면 answer가 문제의 조건에 부합하는 녀석으로 나온다.


아래는 내가 제출한 전체 코드다.

public class NewIDRecommend {
    static String solution(String new_id) {
        String answer = "";
        /** 1번 작업 */
        answer = new_id.toLowerCase();

        /** 2번 작업 */
        String match = "[^a-z\\d\\-_.]*";
        answer = answer.replaceAll(match, "");

        /** 3번 작업 */
        match = "\\.{2,}";
        answer = answer.replaceAll(match, ".");

        /** 4번 작업 */
        match = "^[.]|[.]$";
        answer = answer.replaceAll(match, "");

        /** 5번 작업 */
        if(answer.isEmpty())    answer += "a";

        /** 6번 작업 */
        if(answer.length()>15)  answer = answer.substring(0, 15);
        answer = answer.replaceAll("[.]$", "");

        /** 7번 작업 */
        if(answer.length()<=2){
            char last = answer.charAt(answer.length()-1);
            while(answer.length()!=3)   answer += last;
        }

        return answer;
    }

    public static void main(String[] args) {
        String new_id = "abcdefghijklmn.p";
        System.out.println(solution(new_id));
    }
}

오늘 배운 것

Regex 사용법 몇 가지를 배웠다. 잘 기억해두고 적절하게 사용하자!!

profile
개발 빼고 다 하는 개발자

0개의 댓글