티스토리 뷰
Algorithm/프로그래머스 - Java
[알고리즘-자바] 프로그래머스 2021 KAKAO BLIND RECRUITMENT > 신규 아이디 추천
heemang.dev 2023. 7. 31. 16:50
문제
https://school.programmers.co.kr/learn/courses/30/lessons/72410
언어
자바 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;
}
}