이끌든지 따르든지 비키든지

Today I Learned/프로그래머스

[프로그래머스] 신규 아이디 추천 - JAVA

SeongHo5 2024. 1. 18. 22:48

프로그래머스 코딩 테스트 연습 문제 -  개인정보 수집 유효기간 / JAVA 풀이 정리

 


 

풀이

 

문제를 보고, 정규 표현식이 바로 떠올랐는데, 필요할 때마다 구글링 해서 사용했어서 규칙이 정확히 기억이 안 났다...

 

정규표현식으로 풀이하면, 깔끔하게 작성할 수 있을 것 같아 규칙을 보면서 작성해 봤습니다.

 

        public String solution(String new_id) {
        // 1단계 : 모든 대문자를 소문자로 치환
        String id = new_id.toLowerCase();
        // 2단계 : 알파벳 소문자, 숫자, 빼기(-), 밑줄(_), 마침표(.)를 제외한 모든 문자를 제거
        id = id.replaceAll("[^a-z0-9-_.]", "");
        // 3단계 : 마침표(.)가 2번 이상 연속된 부분을 하나의 마침표(.)로 치환
        id = id.replaceAll("[.]{2,}", ".");
        // 4단계 : 처음과 끝에 마침표(.)가 있다면 제거
        id = id.replaceAll("^[.]|[.]$", "");
        
        if (id.length() >= 16) {
        	// 길이가 15 이상이라면, 첫 15개 제외 모두 제거
            id = id.substring(0, 15);
            // 제거 후, 4단계 조건에 위배되는지 다시 확인
            id = id.replaceAll("[.]$", "");
        } else if (id.length() <= 2) {
        	// 빈 문자열이라면 "a" 추가
            if (id.isEmpty()) id += "a";
            while (id.length() < 3) {
            	// 길이가 3이 될 때까지, 마지막 글자를 이어 붙인다.
                id += id.charAt(id.length() - 1);
            }
        }
        return id;
    }

 

 

규칙에서 무엇을 해야 하는지를 차근히 설명해 줘서, 정규 표현식을 몰라도 어렵지 않게 풀 수 있는 문제인 듯하다!!