신규 아이디 추천

김나영·2023년 6월 20일
0

프로그래머스

목록 보기
30/39

문제 : 신규 아이디 추천

풀이

new_id = new_id.toLowerCase();
  • new_id의 모든 대문자를 대응되는 소문자로 치환
new_id = new_id.replaceAll("[^-_.a-z0-9]", "");
  • newid에서 알파벳 소문자, 숫자, 빼기(-), 밑줄(), 마침표(.)를 제외한 모든 문자 제거

  • 정규식 사용 ==> `("[^-_.a-z0-9]")

    • [^]는 not 즉, 안의 내용 이외의 것
  • 문자를 공백으로 대체하기 위해 replaceAll() 함수 사용

new_id = new_id.replaceAll("[.]{2,}",".");
  • new_id에서 마침표(.)가 2번 이상 연속된 부분을 하나의 마침표(.)로 치환

  • 정규식 사용 ==> ("[.]{2,}")

    • [] 하나의 문자를 나타낼 때 사용
    • {} 안에는 반복을 나타내는데 {n, m}하면 n부터 m개까지, 2개 이상이기 때문에 {2,}
    • 2개 이상의 연속된 마침표가 있다면 "." 로 치환
new_id = new_id.replaceAll("^[.]|[.]$", "");
  • new_id에서 마침표(.)가 처음이나 끝에 위치한다면 제거

  • 정규식 사용 ==> `("^[.]|[.]$")

    • ^ : 문자열의 시작을 의미

    • | : Or 연산

    • $ : 문장의 끝을 의미

  • 마침표가 처음이나 끝에 있으면 ""로 치환

if(new_id.isEmpty()) new_id += "a";
  • new_id가 빈 문자열이라면, new_id에 "a"를 대입
if(new_id.length()>=16) {
   new_id = new_id.substring(0, 15);
   new_id = new_id.replaceAll("^[.]|[.]$", "");
}
  • new_id의 길이가 16자 이상이면

  • new_id의 첫 15개의 문자만 추출

  • 후에 마침표(.)가 new_id의 끝에 위치한다면 끝에 위치한 마침표(.) 문자를 제거 ==> ""로 치환

  • substring을 이용해 문자열을 15개로 자름

if(new_id.length()<3){
  char c = new_id.charAt(new_id.length()-1);
  while(new_id.length() != 3){
       new_id += c;
  }
}
  • new_id의 길이가 2자 이하라면

  • charAt()으로 마지막 글자를 구함

  • new_id의 마지막 문자를 new_id의 길이가 3이 될 때까지 반복해서 끝에 붙여줌

  • new_id의 길이가 3이 되기 전까지 반복

  • new_id에 붙임(3이 되지 않을 경우에만 마지막 character)

전체 코드

class Solution {
    public String solution(String new_id) {
        String answer = "";
        new_id = new_id.toLowerCase();
        new_id = new_id.replaceAll("[^-_.a-z0-9]", "");
        new_id = new_id.replaceAll("[.]{2,}",".");
        new_id = new_id.replaceAll("^[.]|[.]$", "");
        if(new_id.isEmpty()) new_id += "a";
        if(new_id.length()>=16) {
            new_id = new_id.substring(0, 15);
            new_id = new_id.replaceAll("^[.]|[.]$", "");
        }
        if(new_id.length()<3){
            char c = new_id.charAt(new_id.length()-1);
            while(new_id.length() != 3){
                new_id += c;
            }
        }
        answer = new_id;
        return answer;
    }
}

replaceAll()

  • String replaceAll(String regex, String replacement)

  • r대상 문자열을 원하는 문자 값으로 변환하는 함수

  • 첫번째 매개변수는 변환하고자 하는 대상이 될 문자열

  • 두번째 매개변수는 변환할 문자 값


charAt()

  • index에 해당하는 문자를 반환

  • 인덱스는 0부터 length()-1 까지

  • 첫 번째 문자 인덱스는 0

0개의 댓글