본문 바로가기

알고리즘 풀이/프로그래머스

[프로그래머스] 신규 아이디 추천 / 2021 KAKAO BLIND RECRUITMENT - JAVA

🔗 문제 링크

[프로그래머스] 신규 아이디 추천 / 2021 KAKAO BLIND RECRUITMENT

 

코딩테스트 연습 - 신규 아이디 추천

카카오에 입사한 신입 개발자 네오는 카카오계정개발팀에 배치되어, 카카오 서비스에 가입하는 유저들의 아이디를 생성하는 업무를 담당하게 되었습니다. 네오에게 주어진 첫 업무는 새로 가

programmers.co.kr

 

📝 풀이 과정

문제를 보고 정규식을 활용할 수 있는 문제라고 생각해 정규식을 사용하기로 했다.

 

조건을 차례대로 보면,
1번은 toLowerCase()를 사용해 문자열을 소문자 형태로 변경이 가능하다


2번부터 4번까지는 replaceAll(regex, replacement)를 사용했는데 regex에 변경하고자하는 정규식을 입력하고 replacement에 변경할 문자열을 넣으면 된다. 자바에서 문자열 관련 함수는 대부분 기존 문자열을 변경하지 않고 변경된 문자열을 반환하는 형태이기 때문에 체이닝(Chaining)을 활용해 계속 함수를 붙여가며 작성해주었다.

(참고: [Java] 정규식 문법 정리(Regex))

 

6번의 경우 문자열의 길이가 15보다 클 경우 15로 자르고 끝에 점이 붙었다면 replaceAll을 통해 제거해주었다.


마지막으로 길이가 3보다 작을 경우 마지막 문자열을 반복해 붙여주기 위해 str.repeat(count)를 사용했다. str.repeat(count)을 사용하면 str이 count만큼 반복된 문자열이 나오기 때문에 3과의 차이만큼 생성해 붙여주었다(java 11 이상부터 사용가능)

 

💻 코드

class Solution {
    public String solution(String new_id) {
        new_id = new_id.toLowerCase() // 1번
                        .replaceAll("[^\\w-\\.]", "") // 2번
                        .replaceAll("[\\.]{2,}", ".") // 3번
                        .replaceAll("^\\.|\\.$", ""); // 4번

        if (new_id.length() == 0) new_id = "a"; // 5번

        if (new_id.length() > 15)
            new_id = new_id.substring(0, 15).replaceAll("\\.$",""); // 6번

        if (new_id.length() <= 2)
            new_id += new String(new_id.charAt(new_id.length() - 1) + "").repeat(3 - new_id.length()); // 7번

        return new_id;
    }
}