Scroll indicator done
728x90

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

 

프로그래머스

코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.

programmers.co.kr


조건
  • 아이디의 길이는 3자 이상 15자 이하여야 합니다.
  • 아이디는 알파벳 소문자, 숫자, 빼기(-), 밑줄(_), 마침표(.) 문자만 사용할 수 있습니다.
  • 단, 마침표(.)는 처음과 끝에 사용할 수 없으며 또한 연속으로 사용할 수 없습니다.

 

알고리즘
  • 대문자 → 소문자
  • 소문자, 숫자, 빼기, 밑줄, 마침표 제외 제거
  • 마침표 연속된 부분 하나의 마침표로 치환
  • 마침표가 처음이나 끝에 있으면 제거
  • 빈 문자열이면 “a” 대입
  • 16자 이상이면, 첫 15개 문자 제외 나머지 제거
    • 제거 후, 마침표가 끝에 위치하면 끝에 위치한 마침표 제거
  • 길이가 2자 이하라면, 3자 이상이 될 때까지 마지막 문자를 끝에 붙임
package com.example.javaproject3.psstudy;

public class Solution72410 {
    public String solution(String new_id) {
        String answer = "";
        new_id = new_id.toLowerCase();  // 1. 대문자를 소문자로 치환

        for (int i = 0; i < new_id.length(); i++) {  // 2. 문자열 길이만큼 반복하여 소문자, 숫자, 빼기, 밑줄, 마침표만 탐색
            char c = new_id.charAt(i);
            if (Character.isAlphabetic(c) || Character.isDigit(c) || c == '-' || c == '_' || c == '.')  // 소문자, 숫자, 빼기, 밑줄, 마침표라면
                answer += c;  // answer에 추가
        }

        while (answer.indexOf("..") != -1)  // indexOf("..") : 문자열 안에서 ".." 를 찾지 못했을 경우, -1 반환됨
            answer = answer.replace("..", ".");  // 3. 연속된 부분의 마침표를 하나의 마침표로 치환

        if (!answer.equals("") && answer.charAt(0) == '.')  // 4. 문자열이 비어있지 않고, 마침표가 처음이나 끝에 있으면 제거
            answer = answer.substring(1);  // 맨 앞 자르기
        if (!answer.equals("") && answer.charAt(answer.length() - 1) == '.')
            answer = answer.substring(0, answer.length() - 1); // 맨 뒤 자르기
        
        if (answer.equals("")) answer += "a";  // 5. 빈 문자열이면 “a” 대입

        if (answer.length() >= 16) {  // 6. 16자 이상이면, 첫 15개 문자 제외 나머지 제거 
            answer = answer.substring(0, 15); // 15 글자 이전까지 자르기
            if (answer.charAt(answer.length() - 1) == '.')  // 제거 후, 마침표가 끝에 위치하면 끝에 위치한 마침표 제거
                answer = answer.substring(0, answer.length() - 1);  // 맨 뒤 자르기
        }
        
        if (answer.length() <= 2) {  // 7. 길이가 2자 이하라면, 3자 이상이 될 때까지 마지막 문자를 끝에 붙임
            while (answer.length() < 3)  // 문자열 길이가 3이 될 때까지 반복하여 맨 끝 글자를 문자열에 더함
                answer += answer.charAt(answer.length() - 1);  
        }
        return answer;
    }

    public static void main(String[] args) {
        Solution72410 solution72410 = new Solution72410();
        System.out.println(solution72410.solution("=.="));
    }
}
// 정규 표현식 이용
class Solution {
    public String solution(String new_id) {
        // 1
        String answer = new_id.toLowerCase();
        // 2
        answer = answer.replaceAll("[^-_.a-z0-9]", "");
        // 3
        answer = answer.replaceAll("\\.+", ".");
        // 4
        answer = answer.replaceAll("^[.]|[.]$", "");
        // 5
        if (answer.equals(""))
            answer = "a";
        // 6
        if (answer.length() > 15){
            answer = answer.substring(0, 15);
            answer = answer.replaceAll("[.]$", "");
        }
        // 7
        while (answer.length() < 3)
            answer += answer.charAt(answer.length() - 1);

        return answer;
    }
}

728x90