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

홈런볼·2023년 7월 10일
0

프로그래머스

목록 보기
11/36

문제링크

https://school.programmers.co.kr/learn/courses/30/lessons/72410

문제접근

문자열을 조건에 맞게 치환하는 문제이다. 정규표현식을 사용한다.

  1. 입력 문자의 대문자를 소문자로 치환
  2. 정규표현식 패턴을 이용하여 소문자, 숫자, 빼기, 밑줄, 마침표를 제외한 모든 문자를 공백으로 치환.
    a-z 는 소문자,0-9는 숫자, \\-_. 는 특수문자이기 때문에 이스케이프 문자를 앞에 추가해 패턴을 적용
  3. 특정 문자와 n번 이상 일치 하는지 확인하는 패턴 {n, }을 이용하여 마침표가 2번이상 연속되면 마침표 하나로 치환
  4. 마침표(.)가 처음이나 끝에 위치한다면 제거
  5. 문자열이 비어있는지 체크하고 비어있으면 "a"를 추가
  6. 문자의 길이가 16자 이상이면, substring으로 앞에 15자만 추출
  7. 문자열 끝이 마침표가 있으면 공백으로 치환
  8. 문자의 길이가 2자 이하면 문자에서 마지막 글자를 추출하고, 문자의 길이가 3이 될때 까지 append로 마지막 글자를 붙여준다.

코드

class Solution {
    public String solution(String new_id) {
        String answer = "";
        answer = new_id.toLowerCase();
        answer = answer.replaceAll("[^a-z0-9\\-_.]","");
        answer = answer.replaceAll("\\.{2,}",".");
        answer = answer.replaceAll("^[.]|[.]$","");
        answer = answer.length()==0 ? "a":answer;
        answer = answer.length() >= 16 ? answer.substring(0,15) : answer;
        answer = answer.replaceAll("[.]$","");

        if(answer.length()<=2) {
            char c = answer.charAt(answer.length()-1);
            StringBuilder sb = new StringBuilder(answer);
            while(sb.length()<3){
                sb.append(c);
            }
            answer = sb.toString();
        }
        return answer;
    }
}

정확성 테스트

0개의 댓글