알고리즘/프로그래머스

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

K.두부 2022. 8. 23. 22:19
반응형

https://school.programmers.co.kr/learn/courses/30/lessons/72410?language=java 

 

프로그래머스

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

programmers.co.kr

풀이

7개의 단계가 있어서 문제가 어려워 보이지만 매우 간단하다. 

문제를 보자마자 정규표현식을 떠올렸고 생각나는대로 작성했다. 

 

정규표현식을 몰라도 충분히 풀 수 있는 문제이기 때문에 전혀 어렵지 않지만 정규표현식의 사용 유무에 따라 코드 길이가 엄청 달라진다.

class Solution {
    public String solution(String new_id) {
        String answer = "";
        
        // 1단계. 대문자 -> 소문자로 변경
        new_id = new_id.toLowerCase();
        
        // 2단계. 알파벳, 소문자, 숫자, 빼기(-), 밑줄(_), 마침표(.) 문자를 제외한 모든 문자 제거
        new_id = new_id.replaceAll("[^-_.a-z0-9]", "");
        
        // 3단계. 마침표(.)가 2번 이상 연속된 부분을 하나의 마침표(.)로 치환
        while (new_id.indexOf("..") != -1) {
            new_id = new_id.replace("..", ".");
        }
        
        // 4단계. 마침표(.)가 처음과 끝에 위치하고 있다면 삭제
        if (new_id.startsWith(".")) {
            new_id = new_id.substring(1);
        }
        
        if (new_id.endsWith(".")) {
            new_id = new_id.substring(0, new_id.length() -1);
        }
        
        // 5단계. 빈 문자열이라면 a를 대입
        if (new_id.isEmpty()) {
            new_id = "a";
        }
        
        // 6단계. 길이가 16자 이상이면 15글자 이후 삭제
        if (new_id.length() > 15) {
            new_id = new_id.substring(0,15);
            
            if (new_id.endsWith(".")) {
                new_id = new_id.substring(0, new_id.length() -1);
            }
        }
        
        // 7단계. 길이가 2자 이하라면 마지막 문자를 반복 (길이가 3이 될 때까지)
        while (new_id.length() < 3) {
            new_id += new_id.charAt(new_id.length() -1);
        }
       
        return new_id;
    }
}

 

정규표현식을 이용해서 해결한 능력자

class Solution {
    public String solution(String new_id) {
        String id = new_id.toLowerCase(); // 소문자로 
        id = id.replaceAll("[^-_.a-z0-9]", ""); //-_. 영문자 숫자만 남김 
        id = id.replaceAll("[.]{2,}", "."); // .2개 이상 .으로 
        id = id.replaceAll("^[.]|[.]$", ""); // 처음과 끝 . 제거 

        if(id.equals("")) // 빈 문자열이라면 a 추가 
            id += "a";
            
        if(id.length() >= 16){ // 16자 이상이면 15자로 
            id = id.substring(0, 15);
            id = id.replaceAll("^[.]|[.]$", ""); // 끝 . 제거 
        }
        if(id.length() <= 2) // 2자 이하라면 3자까지 마지막 문자추가 
            while(id.length() < 3)
                id += id.charAt(id.length() - 1);

        return id;
    }
}
반응형