프로그래머스 2021 KAKAO BLIND RECRUITMENT Level 1 문제 신규 아이디 추천을 Java를 이용해 풀어보았다.
정규 표현식을 이용하면 간단하게 풀이가 가능하다. 이번 기회에 정규 표현식 중 기본적인 용법들을 배웠다.
문제 링크 첨부한다.
https://programmers.co.kr/learn/courses/30/lessons/72410
/** 1번 작업 */
answer = new_id.toLowerCase();
/** 2번 작업 */
String match = "[^a-z\\d\\-_.]*";
answer = answer.replaceAll(match, "");
소문자, 숫자, '-', '_', '.' 를 제외하고는 모두 없애야 하므로 match
를 선언해서 replaceAll()
메소드를 이용하면 된다.
^
를 []
안에 배치하면 not
의 의미를 갖는다. 즉 []
안에 있는 놈들 빼고 판별한다는 의미다.
/** 3번 작업 */
match = "\\.{2,}";
answer = answer.replaceAll(match, ".");
특수문자를 표현할 때는 \\.
와 같이 \
를 연속해서 써줘야 하며, 몇 회 이상 반복되는지를 나타낼 때는 {n,}
와 같이 표현해서 n
번 이상을 나타낸다.
/** 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("[.]$", "");
subString()
이용해서 잘라내고 끝에 .
가 남아있을 경우를 대비해 제거해준다.
/** 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 사용법 몇 가지를 배웠다. 잘 기억해두고 적절하게 사용하자!!