(Java)프로그래머스 - 신규 아이디 추천

윤준혁·2024년 3월 17일

나의 풀이

class Solution {
    public String solution(String new_id) {
        String answer = new_id.toLowerCase().replaceAll("[^a-z0-9-_.]", ""); // 1, 2
        
        answer = answer.replaceAll("\\.+", "."); // 3
        
        answer = answer.replaceAll("^\\.|\\.$", ""); // 4
        
        if (answer.isEmpty()) { // 5
            answer = "a";
        }
        
        if (answer.length() > 15) { // 6
            answer = answer.substring(0, 15).replaceAll("\\.$", "");
        }
        
        while (answer.length() < 3) { // 7
            answer += answer.charAt(answer.length() - 1);
        }
        
        return answer;
    }
}

과정

다른 사람 풀이

class Solution {
    public String solution(String new_id) {

        String s = new KAKAOID(new_id)
                .replaceToLowerCase()
                .filter()
                .toSingleDot()
                .noStartEndDot()
                .noBlank()
                .noGreaterThan16()
                .noLessThan2()
                .getResult();


        return s;
    }

    private static class KAKAOID {
        private String s;

        KAKAOID(String s) {
            this.s = s;
        }

        private KAKAOID replaceToLowerCase() {
            s = s.toLowerCase();
            return this;
        }

        private KAKAOID filter() {
            s = s.replaceAll("[^a-z0-9._-]", "");
            return this;
        }

        private KAKAOID toSingleDot() {
            s = s.replaceAll("[.]{2,}", ".");
            return this;
        }

        private KAKAOID noStartEndDot() {
            s = s.replaceAll("^[.]|[.]$", "");
            return this;
        }

        private KAKAOID noBlank() {
            s = s.isEmpty() ? "a" : s;
            return this;
        }

        private KAKAOID noGreaterThan16() {
            if (s.length() >= 16) {
                s = s.substring(0, 15);
            }
            s = s.replaceAll("[.]$", "");
            return this;
        }

        private KAKAOID noLessThan2() {
            StringBuilder sBuilder = new StringBuilder(s);
            while (sBuilder.length() <= 2) {
                sBuilder.append(sBuilder.charAt(sBuilder.length() - 1));
            }
            s = sBuilder.toString();
            return this;
        }

        private String getResult() {
            return s;
        }
    }
}

0개의 댓글