2021 카카오 블라인드 - 신규 아이디 추천(Java, 정규표현식)

minji·2021년 10월 9일
0

앞선 포스트에서 Java에서 정규표현식과 replaceAll() 메서드를 이용해 특정 패턴의 문자열을 치환하는 방법에 대해 알아보았다.

이번에는 이를 이용해, 2021 카카오 블라인드 기출문제인 '신규아이디 추천'을 풀어보려고 한다.
문제는 다음과 같다.

- 1단계

1단계의 경우, 별다른 정규표현식의 사용 없이 String의 메서드인 toLowerCase()를 사용한다.

- 2단계

2단계는 위와 같이 regex를 지정할 수 있다. [] 내의 문자들 중 어떠한 것들도 포함될 수 있으므로 해당 문자들 모두가 빈칸으로 치환된다.
또는, 메타문자 ^를 사용해 알파벳 소문자, 숫자, -, _, . 를 제외시켜줄수도 있다.

answer = answer.replaceAll("[^a-z0-9-_.]","");	//위와 같은 의미

두가지 중, 어느방법을 써도 같은 의미이나, 아래의 ^를 사용한 방법이 가독성 측면에서도, 실수를 방지하기 위해서도 좋은듯 하다.

- 3단계

이 경우, n번 이상 반복에 해당되는 {n} 정규표현식을 사용해도 되며, 위와 같이 메타문자 +를 이용해 1번이상 반복되는 마침표에 대해 치환할 수도 있다.

주의할 점은, 한 문자를 표현하는 []의 사용 없이, 특정 문자를 바로 표현할 경우 메타문자와 겹칠 수 있다.
이 경우 \\ (역슬래쉬 두번)을 앞에 붙여, 해당 문자열 그대로라는 의미를 전해야한다.

위의 경우 .는 메타문자와 중복되므로 \\. 으로 표현해주어야한다.
또는, 간단히 [.]+로 표현해도 무방하다.

- 4단계

이 경우, 문자열의 시작을 의미하는 메타문자 ^, 문자열의 끝을 의미하는 메타문자$ 를 이용해 regex를 규정할 수 있다.
^[.] : 문자열의 시작에 오는 마침표,
[.]$ : 문자열의 끝에 오는 마침표 를 의미하므로
^[.] | [.]$ : 문자열의 시작 또는 끝에 오는 마침표를 의미한다.

- 5단계

5단계는 간단히 공백문자여부 확인 후 문자열을 a로 지정한다.

- 6단계

6단계는 두 단계로 나뉘는데, 첫 단계는 String클래스의 substring() 메서드를, 두번째 단계는 정규식을 사용할 수 있다.
string.substring(m,n) : 문자열 string에 대해, string[m] 부터 string[n-1]번째 범위를 잘라 반환한다.

이때 첫 15개의 문자라고 했으므로, 0번 ~ 14번 문자를 떼어내야한다.
substring(0,14) 가 아닌, substring(0,15)임에 주의하자.
두 번째 단계의 경우, 앞선 4단계와 유사하게 $ 문자를 사용해 처리할 수 있다.

- 7단계

7단계의 경우, 정규식의 사용 없이 반복문을 이용해 표현할 수 있다.

'신규 아이디 추천' 문제의 경우 정규표현식과 String 클래스의 메서드인 substring, toLowerCase 등을 알고 있는지 확인해볼 수 있는 문제였다.

문제는여기를 클릭해 확인할 수 있으며, 다음 포스트에서는 regex 패키지에 대해 알아보자.

profile
SW Engineer

0개의 댓글