개발공부/코딩테스트 연습문제

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

ku-na 2022. 1. 4. 11:47

문제 설명과 제한사항

문제 설명
제한사항

풀이

class Solution {
    public String solution(String new_id) {
        String answer = new_id;
            
        //대문자 -> 소문자
        answer = answer.toLowerCase(); 
        
        //사용불가 특수문자 제거
        answer = answer.replaceAll("[^a-z0-9-_.]","");
        
        //.연속사용 제거
        answer = answer.replaceAll("[.]{2,1000}",".");
        
        //처음과 마지막에 위치한 . 제거
        if(answer.startsWith(".")) {
            answer = answer.substring(1,answer.length());
        }
        if(answer.endsWith(".")){
            answer = answer.substring(0,answer.length()-1);
        }
    
        
        //빈 문자열
        if(answer.length() == 0) {
            answer = "a";
        }
        
         //16자 이상
        if(answer.length() > 15) {
            answer = answer.substring(0,15);
            if(answer.endsWith(".")){
            answer = answer.substring(0,answer.length()-1);
            }
        }
        
        if(answer.length() < 3){
            while(answer.length() < 3){
                answer = answer + answer.substring(answer.length()-1);
            }
        }
        
        return answer;
    }
}

++

잊고 있던 키워드

 

toLowerCase() : 문자열(String)에서 대문자를 소문자로 치환해주는 함수

<-> toUpperCase() : 문자열(String)에서 소문자를 대문자로 치환해주는 함수

 

replaceAll(String a, String b) : 문자열내부에서 모든 a문자열을 b로 치환해주는 함수

-> [^a-z0-9-_.] a~z 0~9, -, _, . 을 제외(^)한 모든 문자를 나타냈다.

-> [.]{2,1000} : .의 연속사용을 막기 위해 사용 .이 2~1000개 이상 반복되면 .으로 치환했다.

 

startsWith(String a) : 문자열 맨 앞에 a 가 있으면 true 반환

<-> endWith(String a) : 문자열 맨 뒤에 a 가 있으면 true 반환

 

substring(int a, int b) : 문자열 a번째 ~b-1번째 문자열로 반환 

ex) String a = "abcdef";

    a.substring(1,6) -> "bcdef"

 

잊고 있었던 문자열 내부 함수들의 사용으로 힘들었다.