Skip to content

New ID recommendation

1. Problem

해당 문제는 여기에서 확인하실 수 있습니다.

2. Problem solving process

이 문제는 주어진 아이디 문자열을 일정한 규칙에 따라 변환하여 최종적으로 조건에 맞는 아이디를 추천하는 과정을 포함합니다. 문제에서 제시한 규칙을 순서대로 수행해야 하며, 각 규칙에 맞게 문자열을 변환하여 최종 결과를 만들어야 합니다.

  1. 먼저, 대문자가 포함된 경우 소문자로 변환하는 것부터 시작합니다. 이는 toLowerCase() 메서드를 활용하여 쉽게 해결할 수 있습니다.

  2. 이후 아이디에서 사용할 수 있는 문자들(알파벳 소문자, 숫자, 빼기, 밑줄, 마침표) 외에는 모두 제거해야 합니다. 정규 표현식 [a-z0-9-_.]을 통해 알파벳 소문자와 숫자, 그리고 지정된 특수문자를 제외한 모든 문자를 제거할 수 있습니다.

  3. 마침표(.)가 두 번 이상 연속될 경우 이를 하나의 마침표로 축소해야 합니다. 이 과정도 정규 표현식을 통해 연속된 마침표를 하나로 바꾸는 방식으로 간단히 해결할 수 있습니다.

  4. 그다음 아이디의 처음이나 끝에 위치한 마침표를 제거합니다. 이 과정 또한 정규 표현식을 이용하여 시작(^)이나 끝($)에 위치한 마침표를 찾아 제거합니다.

  5. 만약 빈 문자열이 되어버린 경우에는 'a'를 대입하여 아이디가 빈 문자열이 되지 않도록 합니다.

  6. 아이디가 너무 긴 경우, 최대 15자까지만 남기고 나머지는 삭제하며, 이때 남은 문자열 끝에 마침표가 있다면 이를 제거해야 합니다.

  7. 마지막으로, 아이디가 너무 짧은 경우에는 3자가 될 때까지 마지막 문자를 반복하여 추가해줍니다.

이러한 단계를 차례대로 적용하면서 문자열을 변환해 나가면 문제의 요구사항을 충족하는 추천 아이디를 완성할 수 있습니다.

3. Answer

class Solution {
  public String solution(String new_id) {
    // 1단계: 모든 대문자를 소문자로 치환
    String answer = new_id.toLowerCase();

    // 2단계: 알파벳 소문자, 숫자, 빼기(-), 밑줄(_), 마침표(.)를 제외한 모든 문자 제거
    answer = answer.replaceAll("[^a-z0-9-_.]", "");

    // 3단계: 마침표(.)가 2번 이상 연속된 부분을 하나의 마침표(.)로 치환
    answer = answer.replaceAll("[.]{2,}", ".");

    // 4단계: 마침표(.)가 처음이나 끝에 위치한다면 제거
    answer = answer.replaceAll("^[.]|[.]$", "");

    // 5단계: 빈 문자열이라면, new_id에 "a"를 대입
    if (answer.isEmpty()) {
      answer = "a";
    }

    // 6단계: 길이가 16자 이상이면, 첫 15개의 문자를 제외한 나머지 문자들을 제거
    // 제거 후 마침표(.)가 끝에 위치한다면 제거
    if (answer.length() >= 16) {
      answer = answer.substring(0, 15);
      answer = answer.replaceAll("[.]$", "");
    }

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

    return answer;
  }
}