[Algorithm] 신규 아이디 추천

Jong Min ·2025년 4월 21일

Algorithm

목록 보기
15/30

신규 아이디 추천 (프로그래머스 72410) 블로그

📌 문제 설명

이용자가 입력한 new_id를 7단계의 규칙에 따라 새로운 아이디로 추천하는 기능을 구현하는 문제입니다.

1단계: 모든 대문자를 소문자로 치환
2단계: 소문자, 숫자, 빼기(-), 밑줄(_), 마침표(.)를 제외한 모든 문자를 제거
3단계: 연속된 마침표(.)를 하나의 마침표로 치환
4단계: 마침표가 맨 처음 또는 맨 끝에 위치하면 제거
5단계: 빈 문자열이면 "a"를 대입
6단계: 길이가 16자 이상이면 첫 15개 문자를 제외하고 모두 제거, 끝이 마침표면 다시 제거
7단계: 길이가 2자 이하면, 마지막 문자를 길이가 3이 될 때까지 반복해서 끝에 붙임

예제

"...!@BaT#*..y.abcdefghijklm" → "bat.y.abcdefghi"

💡 핵심 포인트

  • 7개의 단계별 문자열 변환을 순차적으로 정확히 적용해야 함
  • 정규식StringBuilder를 적절히 활용해 불필요한 문자 제거 및 연속 문자 처리를 구현
  • 빈 문자열, 최대·최소 길이 조건을 놓치지 않고 처리

🔍 풀이 아이디어

  1. 소문자 변환: String#toLowerCase()
  2. 허용 문자 필터링: replaceAll("[^a-z0-9._-]", "")
  3. 연속된 마침표 축소: replaceAll("\\.{2,}", ".")
  4. 양끝 마침표 제거: startsWith, endsWith, substring
  5. 빈 문자열 처리: if (temp.isEmpty()) temp = "a";
  6. 최대 길이 제한: substring(0,15) + 끝 마침표 체크
  7. 최소 길이 보정: StringBuilder에 반복해서 마지막 문자 추가

✅ 자바 구현 코드

public class Solution {
    public static String solution(String new_id) {
        // 1단계: 소문자 변환
        String temp = new_id.toLowerCase();

        // 2단계: 허용 문자 외 제거
        temp = temp.replaceAll("[^a-z0-9._-]", "");

        // 3단계: 연속된 마침표 하나로
        temp = temp.replaceAll("\\.{2,}", ".");

        // 4단계: 양끝 마침표 제거
        if (temp.startsWith(".")) temp = temp.substring(1);
        if (temp.endsWith("."))   temp = temp.substring(0, temp.length()-1);

        // 5단계: 빈 문자열 처리
        if (temp.isEmpty()) temp = "a";

        // 6단계: 길이 제한
        if (temp.length() >= 16) {
            temp = temp.substring(0, 15);
            if (temp.endsWith(".")) {
                temp = temp.substring(0, temp.length()-1);
            }
        }

        // 7단계: 최소 길이 3자 보정
        StringBuilder sb = new StringBuilder(temp);
        while (sb.length() < 3) {
            sb.append(sb.charAt(sb.length() - 1));
        }

        return sb.toString();
    }

       

🧠 배운 점

  • [^…] 정규식 패턴을 좀 알아두는게 좋은거 같다 !!
  • substringStringBuilder#setLength를 조합하면 잘라내기가 쉽다
profile
노력

0개의 댓글