Today
-
Yesterday
-
Total
-
  • 프로그래머스 : 신규 아이디 추천
    코딩테스트 문제 풀이/프로그래머스 2023. 11. 23. 00:09

    다른사람 코드 _ 프로그래머스 첫 번쨰

    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 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;
            }
        }
    }

    클래스의 사용과 정규식의 다양한 사용방법을 배울 수 있는 코드였다!!

    정규식 📝🤓

    1. 문자 2개 이상 "[.]{2,}"      1-1. 문자 2개 : "[.]{2}"      1-2. 문자 2개 이상 10개 이하: "[.]{2,10}"
    2. !로 시작 : "^[!]"
    3. !로 끝남 : "[!]$"

    내 코드

    머쓱;

    class Solution {
        public String solution(String new_id) {
            // 1
            new_id = new_id.toLowerCase();
            
            // 2
            new_id = new_id.replaceAll("[^\\-_.a-z0-9]", "");
            
            // 3
            new_id = removeRangeDot(new_id);
            
            // 4
            new_id = removeFirstDot(new_id);
            new_id = removeLastDot(new_id);
            
            // 5
            if (new_id.length() == 0) new_id = "aaa";
    
            // 6
            if (new_id.length() > 15) {
                new_id = new_id.substring(0, 15);
                new_id = removeLastDot(new_id);
            }
            
            // 7
            while (new_id.length() < 3) {
                new_id += new_id.substring(new_id.length() - 1);
            }
            
            return new_id;
        }
        
        public String removeRangeDot(String id) {
            while (id.contains("..")) id = id.replace("..", ".");
            return id;
        }
        public String removeFirstDot(String id) {
            while (id.length() > 0 && id.charAt(0) == '.') id = id.substring(1);
            return id;
        }
        public String removeLastDot(String id) {
            while (id.length() > 0 && id.charAt(id.length() - 1) == '.') id = id.substring(0, id.length() - 1);
            return id;
        }
    }

Designed by Tistory / Custom by 얼거스