[프로그래머스] Lv.1 신규 아이디 추천 / JAVA

YuLim·2023년 5월 19일
1

Algorithm

목록 보기
1/1

🔗 문제 링크

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문으로 고치는게 가독성에 더 좋을 것 같다.

profile
개인 공부 기록장

0개의 댓글