Programmers - 신규아이디추천

김재민·2022년 4월 29일
0

문제

접근

우선 문자열 문제였고 문제에서 친절하게? 각 단계별로 해야할 과정이 명시되어 있었다.
(예전에 비슷한 문제를 네이버 부스트캠프에서 풀어본 것 같다.)

1단계 : new_id의 모든 대문자를 대응되는 소문자로 치환합니다.
-> toLowerCase를 사용하면 될것이라 판단

2단계 : 2단계 newid에서 알파벳 소문자, 숫자, 빼기(-), 밑줄(), 마침표(.)를 제외한 모든 문자를 제거합니다.
-> 여기서 replaceAll 메소드를 사용하면 되는것은 알았지만 정규표현식을 쓸 생각을 못하였다. 물론 정규표현식에 대한 이해가 많이 부족하다.

3단계 : new_id에서 마침표(.)가 2번 이상 연속된 부분을 하나의 마침표(.)로 치환합니다.
-> 여기서도 정규표현식을 통해 replaceAll로 치환할 수 있다.

4단계 : new_id에서 마침표(.)가 처음이나 끝에 위치한다면 제거합니다.
-> 여기서도 정규표현식을 통해 replaceAll로 치환할 수 있다.

5단계 : new_id가 빈 문자열이라면, new_id에 "a"를 대입합니다.
-> new_id의 길이를 파악하고 0일때 대입하였다.

6단계 : new_id의 길이가 16자 이상이면, new_id의 첫 15개의 문자를 제외한 나머지 문자들을 모두 제거합니다.
만약 제거 후 마침표(.)가 new_id의 끝에 위치한다면 끝에 위치한 마침표(.) 문자를 제거합니다.
-> new_id의 길이를 재고 subString을 통해 추출 후 마침표 문자 체크 후 제거

7단계 : new_id의 길이가 2자 이하라면, new_id의 마지막 문자를 new_id의 길이가 3이 될 때까지 반복해서 끝에 붙입니다.
-> while문을 통해 subString으로 추출한 후 반복하여 + 함

해결

사실 이문제는 정규표현식에 대한 이해가 많이 부족했고 조금 더 디테일하게 공부를 해야겠다는 생각도 들었다. 해답을 보고 문제를 풀었기 때문에 다시한번 도전해봐야겠다.

package Problem;

import java.util.Locale;

public class 신규아이디추천 {

    public static void main (String[]args){

        String s = "\"...!@BaT#*..y.abcdefghijklm";
        //System.out.println(s);
        solution(s);
    }


    private static String solution(String temp) {
        String answer = "";
        String new_id = "z-+.^.";
        //단계별로 과정을 거침
        //1단계 toLowerCase
        temp = temp.toLowerCase();
        new_id = new_id.toLowerCase();

        //2단계 특수문자 제거
        //String match = "^[!]+$";
        System.out.println(new_id);

		//[]중괄호 안에 ^가 있을 때는 not이라는 뜻
        new_id = new_id.replaceAll("[^a-z0-9-_.]","");
        System.out.println(new_id);

        //3단계 ... 과 .. 을 .으로 변경
        String match = "[.]{2,}";
        new_id = new_id.replaceAll("[.]{2,}",".");
        //new_id.replaceAll("bat",".");
        System.out.println(new_id);

        //4단계 처음위치한 . 제거
        //[]중괄호 밖에 ^가 있을 때는 시작하는 문자를 표시 $는 끝나는 문자표시
        System.out.println("4단계");
        new_id = new_id.replaceAll("^[.]|[.]$","");
        System.out.println(new_id);
        //5단계 빈문자열이면 a대입
        if(new_id.length() == 0){
            new_id +="a";
        }

        //6단계 길이가 16자 이상이면, 첫 15개 제외한 나머지 문자 모두 제거
        if(new_id.length() >= 16){
            new_id = new_id.substring(0,15);
        }
        new_id = new_id.replaceAll("[.]$","");
        System.out.println("new_id : "+new_id);

        //7단계 2자 이하라면, new_id의 마지막 문자를 new_id의 길이가 3이될 때까지 반복해서 끝에 붙임
        if(new_id.length() <= 2){
            while(new_id.length() < 3) {
                String ch = new_id.substring(new_id.length() - 1, new_id.length());
                new_id += ch;
            }
        }
        System.out.println("new_id 7단계 : "+new_id);
        return answer;
    }

}
profile
어제의 나보다 나은 오늘의 내가 되자!🧗‍♂️

0개의 댓글