티스토리 뷰

문제

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

 

프로그래머스

코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.

programmers.co.kr

언어

자바 Java

로직

정규식을 이용하여 접근하면 쉽게 풀 수 있습니다.

1단계

String 클래스는 대소문자로 변경할 수 있는 메서드를 제공합니다. 

//1
new_id = new_id.toLowerCase();

2단계

"[^]"의 경우 []에 포함된 문자를 제외한 문자들에 대해서 정규식을 적용합니다. 

//2
new_id = new_id.replaceAll("[^a-z0-9\\-_.]", "");

3단계

"+" 정규식을 사용하면 1번 이상 반복되는 문자에 대해서 처리할 수 있습니다. "\\" 는 이스케이프 문자이기 때문에 백스페이스를 사용하여 표현해야 합니다.

//3
new_id = new_id.replaceAll("\\.+", ".");

4단계

"^" 정규식은 ^ 다음에 작성된 문자열에 대해서 적용되고

"$" 정규식은 $ 이전에 작성된  문자열에 대해서 적용됩니다.

.으로 시작하는 문자가 1개이상이고 .으로 끝나는 문자가 1개 이상인 문자열에 대해서 정규식을 적용합니다.

//4
new_id = new_id.replaceAll("^\\.+|\\.+$", "");

5단계

문자열이 비어있으면 "a"를 저장합니다.

if (new_id.isEmpty())
    new_id = "a";

6단계

문자열의 길이가 16이 넘으면 15개로 잘라줍니다. 이후에 마지막으로 끝나는 문자인 "."가 1개 이상일 때 정규식을 적용합니다.

//6
if (new_id.length() >= 16)
    new_id = new_id.substring(0, 15);
new_id = new_id.replaceAll("\\.+$", "");

7단계

문자열의 길이가 3이상 될 때같이 마지막 문자를 추가해 줍니다.

//7
while (new_id.length() <= 2) {
    new_id += new_id.charAt(new_id.length() - 1);
}

주의

[] 안에서 이스케이프 문자가 사용되는 것과 [] 아닌 곳에서 사용되는 2가지 경우가 존재합니다.

[] 안에서 사용될 경우 이스케이프 문자 또한 문자로 처리되기 대문에 "\\"를 사용하지 않아도 됩니다.

[] 밖에서 사용될 경우 이스케이프 문자 처리를 반드시 해주어야 합니다.


코드

class Solution {
    public String solution(String new_id) {

        //1
        new_id = new_id.toLowerCase();

        //2
        new_id = new_id.replaceAll("[^a-z0-9\\-_.]", "");

        //3
        new_id = new_id.replaceAll("\\.+", ".");

        //4
        new_id = new_id.replaceAll("^\\.+|\\.+$", "");

        //5
        if (new_id.isEmpty())
            new_id = "a";

        //6
        if (new_id.length() >= 16)
            new_id = new_id.substring(0, 15);
        new_id = new_id.replaceAll("\\.+$", "");

        //7
        while (new_id.length() <= 2) {
            new_id += new_id.charAt(new_id.length() - 1);
        }

        return new_id;
    }
}
Total
Today
Yesterday
최근에 올라온 글
«   2024/11   »
1 2
3 4 5 6 7 8 9
10 11 12 13 14 15 16
17 18 19 20 21 22 23
24 25 26 27 28 29 30