https://school.programmers.co.kr/learn/courses/30/lessons/72410
class Solution {
public String solution(String new_id) {
String answer = new_id.toLowerCase(); // 1단계
answer = answer.replaceAll("[^a-z0-9\\-_.]", "") // 2단계
.replaceAll("\\.{2,}", ".") // 3단계
.replaceAll("^\\.|\\.$", ""); // 4단계
if(answer.isEmpty()) answer = "a"; // 5단계
if(answer.length()>=16) answer = answer.substring(0,15).replaceAll("\\.$", ""); // 6단계
char lastChar = answer.charAt(answer.length()-1); // 7단계
for (; answer.length()<=2;) {
answer+=lastChar;
}
return answer;
}
}
프로그래머스 Lv.1에 2021 KAKAO BLIND RECRUITMENT
문제라고 해서 보다가 정규 표현식만 신경 써주면 풀 수 있을 거 같아 도전하게 되었다.
또한, 정규식을 공부할 때 chatGPT를 이용하면 잘 알려준다고 들었던 기억이 있어서 지피티 사용법도 익힐겸 활용해서 풀었다.
주석 2단계 부분의 정규식 answer.replaceAll("[^a-z0-9\\-_.]", "")
은 알파벳 소문자, 숫자, '-', '_', '.'를 제외한 모든 문자 제거하는 식이다.
정규식에서 보이는 \\
두개의 역슬래시의 의미 : 큰따옴표(")내에서 escape문자 \
를 표현하려면 escape문자를 \\
와 같이 두 번 사용해야 한다 (출처 : Java의 정석_남궁 성)
chatGPT없이 풀었다면 정규식을 찾아보고 공부하느라 오래걸렸을 것이다. 지피티를 어느 부분에서 어떻게 활용할지 감을 잡을 수 있었다.
그래도 나중에 따로 시간을 내어 정규식 공부를 해야겠다.
그리고 마지막의 for문을 while문으로 고치는게 가독성에 더 좋을 것 같다.