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

LDH·2021년 3월 15일
0

🔑알고리즘

목록 보기
4/9
post-thumbnail

✨Link 신규 아이디 추천

🤔 문제

신규 유저가 입력한 아이디를 나타내는 new_id가 매개변수로 주어질 때, "네오"가 설계한 7단계의 처리 과정을 거친 후의 추천 아이디를 return 하도록 solution 함수를 완성해 주세요.

입출력 예

nonew_idresult
예1"...!@BaT#*..y.abcdefghijklm""bat.y.abcdefghi"
예2"z-+.^.""z--"
예3"=.=""aaa"
예4"123_.def""123_.def"
예5"abcdefghijklmn.p""abcdefghijklmn"

💡 접근

문제에 따라 순서대로 따라하면 함정 없이 풀이를 할수 있다.

단계설명
1단계new_id의 모든 대문자를 대응되는 소문자로 치환합니다.
💡String toLowerCase()를 이용하여 소문자로 치환
2단계newid에서 알파벳 소문자, 숫자, 빼기(-), 밑줄(), 마침표(.)를 제외한 모든 문자를 제거합니다.
💡String replaceAll(정규식,치환할값) 정규식을 이용하여 제거할 문자를 공백처리
3단계new_id에서 마침표(.)가 2번 이상 연속된 부분을 하나의 마침표(.)로 치환합니다.
💡문자열에서 '..'를 포함하지 않을때까지 (..)를 (.)로 치환
4단계new_id에서 마침표(.)가 처음이나 끝에 위치한다면 제거합니다.
💡char형 배열로 idx 0과 len-1 자리의 문자가 '.'일 경우 substring(start, end)로 문자열을 자르기
-->start부터 end-1자리까지 포함한다!
5단계new_id가 빈 문자열이라면, new_id에 "a"를 대입합니다.
💡문자 길이가 0이면 빈 문자열 이므로, "a"를 대입
6단계new_id의 길이가 16자 이상이면, new_id의 첫 15개의 문자를 제외한 나머지 문자들을 모두 제거합니다. (만약 제거 후 마침표(.)가 new_id의 끝에 위치한다면 끝에 위치한 마침표(.) 문자를 제거합니다.)
💡15개만큼 문자를 자른다. 마지막 문자가 (.)면 제거하도록 반복.
7단계new_id의 길이가 2자 이하라면, new_id의 마지막 문자를 new_id의 길이가 3이 될 때까지 반복해서 끝에 붙입니다.
💡길이가 3이상이 될때까지 마지막 문자를 반복하여 붙인다!

💻 코드(1)_나의 풀이

class Solution {
    public String solution(String new_id) {
       String answer = "";

        //1단계
        answer=new_id.toLowerCase();

        //2단계
        String match = "[^-_.\uAC00-\uD7A3xfe0-9a-zA-Z]";
        answer=answer.replaceAll(match,"");

        //3단계
        while(answer.contains("..")){
            answer=answer.replace("..",".");
        }

        //4단계
        if(answer.length()==1){
            if(answer.toCharArray()[0]=='.'){
                answer="";
            }
        }else{
            if(answer.toCharArray()[0]=='.'){
                answer=answer.substring(1);
            }
            if(answer.toCharArray()[answer.length()-1]=='.'){
                answer=answer.substring(0,answer.length()-1);
            }
        }

        //5단계
        if(answer.length()==0){
            answer="a";
        }

       //6단계
        if(answer.length()>=16){
           answer=answer.substring(0,15);

            while(answer.toCharArray()[answer.length()-1]=='.'){
                answer=answer.substring(0,answer.length()-1);
            }
        }

        //7단계
        if(answer.length()<=2){
            while(answer.length()!=3){
                answer+=answer.toCharArray()[answer.length()-1];
            }
        }

        return answer;
    }
}
  • 4단계에서 문자 길이가 1일 경우에 처리하는것을 생각하지 못했다.. 첫번째 문자가 ( . )이면 두번째 문자부터 substring으로 잘라내니 문자길이가 1일 경우에 에러가 났다. 간단하게 1일때 공백 처리를 해주었다.
profile
💻💻💻

0개의 댓글