Java/Algorithm

[Algorithm] 프로그래머스 신규 아이디 추천 Java 풀이

Jeong Jeon
반응형

문제 : https://school.programmers.co.kr/learn/courses/30/lessons/72410

 

프로그래머스

코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.

programmers.co.kr

 

풀이 : 

정규식을 잘 알았더라면 아주 간단하게 풀수있었을것 같지만... 정규식을 잘몰라 정규식은 쓸수 있는데로만 사용하고,

나머지는 그냥 짜게되었다...

이전 회사에서도 아래 구조 처럼 사용해봐서 메서드를 한번에 호출해서 사용했다.

 class Solution {
    public String solution(String new_id) {
        String answer = new makeNewId(new_id)
                .toLowerCase()
                .filterChar()
                .toSingleDot()
                .removeDot()
                .checkBlank()
                .lengthCheck()
                .removeLastDot()
                .addLength()
                .getNewId();

        return answer;
    }

    private static class makeNewId{
        String newId;

        public makeNewId(String new_id) {
            newId = new_id;
        }
        
        private makeNewId toLowerCase(){
            newId = newId.toLowerCase();
            return this;
        }

        private makeNewId filterChar(){
            newId = newId.replaceAll("[^a-z0-9._-]", "");
            return this;
        }

        private makeNewId toSingleDot(){
            while (newId.indexOf("..") != -1){
                newId = newId.replace("..",".");
            }
            return this;
        }

        private makeNewId removeDot(){
            if (!newId.isEmpty() && newId.charAt(0) == '.'){
                newId = newId.substring(1);
            }

            this.removeLastDot();
            return this;
        }

        private makeNewId checkBlank(){
            newId = newId.isEmpty() ? "a" : newId;
            return this;
        }

        private makeNewId lengthCheck(){
            if(newId.length() >= 16){
                newId = newId.substring(0, 15);
            }

            this.removeLastDot();
            return this;
        }

        private makeNewId removeLastDot(){
            if (!newId.isEmpty() && newId.charAt(newId.length() - 1) == '.'){
                newId = newId.substring(0, newId.length() - 1);
            }

            return this;
        }

        private makeNewId addLength(){
            if(newId.length() <3){
                while(newId.length() < 3){
                    newId += newId.charAt(newId.length() - 1);
                }
            }

            return this;
            
        }

        String getNewId(){
            return newId;
        }
    }

}
반응형