ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • [프로그래머스 Level1][Java] 신규 아이디 추천
    Coding Test/Programmers 2021. 12. 8. 19:26

     

    신규 아이디 추천

    - 아이디를 입력받아 7단계에 걸친 아이디 규칙에 맞는지 검사하여 새로운 아이디를 리턴하는 문제

     

    ※ 생각하기

    - 정규표현식

     

    ※ 풀이법

    1) 1단계 : toLowerCase()로 아이디를 소문자로 만들기

     

    2) 2단계 : [^a-z0-9-_.] 정규표현식을 활용해 replaceAll()

                  - ^가 [  ]안에 들어가게 되면 '^의 뒤 조건들을 빼고'라는 뜻이 된다.

     

    3) 3단계 : [.]{2,} 정규표현식을 활용해 replaceAll()

                  - []안에 있는 마침표가([.]) 2번({2}) 이상(,)이면

     

    4) 4단계 : ^[.]|[.]$ 정규표현식을 활용해 replaceAll()

                  - 마침표로 시작하거나(^[.]) 또는 (|) 마침표로 끝나면([.]$)

     

    5) 5단계 :  빈 문자열이라는 것은 길이(length)가 0이라는 의미와 같으므로 조건과 결과를 삼항 연산자로 구현

     

    6) 6단계 : 길이가 16 이상이면 substring을 이용하여 처음부터 15까지 잘라준다.

                  [.]$ 정규표현식을 활용해 replaceAll() → 4단계 방법을 활용

     

    7) 7단계 : 길이가 2 이하이면 substring()으로 길이 -1 부터 길이만큼 잘라 new_id에 계속 더해주기

     

    정규표현식만 잘 알면 매우 쉬운 문제였다.

    정규표현식 공부를 했었지만 활용해야 할 때마다 구글링하는건 어쩔 수 없는 것 같다. ㅎㅎ;

     

    public class Solution {
    	// 결과 확인을 위함
    	public static void main(String[] args) {
    		Solution st = new Solution();
    		String new_id = "...!@BaT#*..y.abcdefghijklm";
    		System.out.println(st.solution(new_id));
    		new_id = "z-+.^.";
    		System.out.println(st.solution(new_id));
    		new_id = "=.=";
    		System.out.println(st.solution(new_id));
    		new_id = "123_.def";
    		System.out.println(st.solution(new_id));
    		new_id = "abcdefghijklmn.p";
    		System.out.println(st.solution(new_id));
    	}
    	
    	public String solution(String new_id) {
            // 1단계 : 모든 대문자를 대응되는 소문자로 치환
            new_id = new_id.toLowerCase();
            // 2단계 : 알파벳 소문자, 숫자, 빼기(-), 밑줄(_), 마침표(.)를 제외한 모든 문자를 제거
            new_id = new_id.replaceAll("[^a-z0-9-_.]", "");
            // 3단계 : 마침표(.)가 2번 이상 연속된 부분을 하나의 마침표(.)로 치환
            new_id = new_id.replaceAll("[.]{2,}", ".");
            // 4단계 : 마침표(.)가 처음이나 끝에 위치한다면 제거
            new_id = new_id.replaceAll("^[.]|[.]$", "");
            // 5단계 : 빈 문자열이라면, new_id에 "a"를 대입
            new_id = new_id.length() == 0 ? "a" : new_id;
            // 6단계
            // 1) 길이가 16자 이상이면, new_id의 첫 15개의 문자를 제외한 나머지 문자들을 모두 제거
            // 2) 만약 제거 후 마침표(.)가 new_id의 끝에 위치한다면 끝에 위치한 마침표(.) 문자를 제거
            new_id = new_id.length() >= 16 ? new_id.substring(0, 15).replaceAll("[.]$", "") : new_id;
            // 7단계 : 길이가 2자 이하라면, new_id의 마지막 문자를 new_id의 길이가 3이 될 때까지 반복해서 끝에 붙이기
            if(new_id.length() <= 2) {
            	while(new_id.length() < 3) {
            		new_id += new_id.substring(new_id.length()-1, new_id.length());
            	}
            }
        	
            return new_id;
        }
    }
Designed by Tistory.