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

 

 

코딩테스트 연습 - 신규 아이디 추천

카카오에 입사한 신입 개발자 네오는 "카카오계정개발팀"에 배치되어, 카카오 서비스에 가입하는 유저들의 아이디를 생성하는 업무를 담당하게 되었습니다. "네오"에게 주어진 첫 업무는 새로

programmers.co.kr

 

해당 문제는 제시된 문자열을 제시된 과정을 통해서 문자열을 조작하면서 원하는 문자열로 만드는 문제입니다.

과정은 아래와 같습니다.

  1. 대문자 -> 소문자
  2. 소문자, 숫자, 빼기(-), 밑줄('_'), 마침표('.') 제외 모든 문자 제거
  3. 마침표 2회 이상 연속되면 마침표 하나로
  4. 마침표가 처음 혹은 끝에 있으면 제거
  5. 빈 문자열이면 'a' 로 초기화
  6. 16자 이상, 첫 15문자 제외 나머지 문자 모두 제거
  7. 만약 끝에 마침표 있다면 제거
  8. 2자 이하일 경우, 마지막 문자 길이를 3이 될때까지 반복

 

다만, 이 문제를 쉽게 해결하기 위해서는 정규 표현식을 활용하면 좋습니다.

 

예를 들어 특정 문자열 형식(영문 소문자, 숫자)을 제외한 나머지 문자열은 제거할 경우 아래와 같은 정규식 사용이 가능합니다.

        // 소문자, 숫자, 제외 모든 문자 제거
        answer = answer.replaceAll("[^a-z0-9]","");

 

그리고 처음 문자와 끝 문자가 . 일 경우, 제거하는 방법은 아래와 같습니다.

        // 마침표가 처음 혹은 끝에 있다면 제거
        answer = answer.replaceAll("^[.]|[.]$", "");

 

마침표가 최소 2회 이상 연속되면 마침표 하나로 만들려면 아래 코드를 참고하면 됩니다. ( 숫자 뒤에 , 를 사용해야 함)

answer = answer.replaceAll("[.]{2,}",".");

 

 

Source Code Example 은 아래와 같습니다.

import java.util.*;
import java.util.stream.*;

class Solution {
    public static String solution(String new_id) {
        // 모든 대문자 -> 소문자
        String answer = new_id.toLowerCase(Locale.ROOT);
        // 소문자, 숫자, 빼기(-), 밑줄(_), 마침표(.) 제외 모든 문자 제거
        answer = answer.replaceAll("[^-_.a-z0-9]","");
        // 마침표 2번 이상 연속된 부분 하나로 (.. -> .)
        answer = answer.replaceAll("[.]{2,}",".");
        // 마침표가 처음 혹은 끝에 있다면 제거
        answer = answer.replaceAll("^[.]|[.]$", "");
        // 빈 문자열이면 new_id 에 a 대입
        answer = answer.length() > 0 ? answer : "a";
        // 16자 이상, 첫 15 문자 제외한 나머지 문자들 모두 제거
        answer = answer.length() >= 16 ? answer.substring(0,15) : answer;
        // 만약 끝에 . 위치한다면 마지막 마침표 제거
        answer = answer.replaceAll("[.]$", "");
        // 2자 이하일 경우, 마지막 문자를 길이가 3이 될때까지 반복
        if (answer.length() <= 2) {
            answer += answer.substring(answer.length()-1);
            answer += answer.substring(answer.length()-1);
            answer = answer.substring(0,3);
        }
        return answer;
    }
}

 

참고 링크

 

Java - 정규표현식(regex), 다양한 예제로 쉽게 이해하기

정규표현식(Regular expressions), Regex는 문자열에서 어떤 패턴을 찾는데 도움을 줍니다. Regex의 Metacharacters, Quantifiers, Grouping에 대해서 정리하였고 다양한 예제로 설명합니다. Regex는 대부분 알고 있지

codechacha.com

 

+ Recent posts