프로그래머스 신규 아이디 추천 (정규식)

byeol·2023년 3월 24일
0

접근(틀린 문제)

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

이 문제는 정규식을 모르기 때문에 실패했다.

이 문제를 통해서 몇 가지 새롭게 안 사실과 잘못된 사용법에 대해서 정리한다.

  • String의 toLowerCase()
    숫자,영문,특수문자 중에서 대문자만 골라서 소문자로 변경한다.
    처음에는 영문을 분리하는 작업을 해야하나 고민했는데
    저 메서드 자체가 영문만 골라서 소문자로 바꿔준다.

  • 정규 표현식 (제외와 처음을 헷갈리지 말자)

    • 한문자 []
    • 제외 [^]
    • 처음 ^[]
    • 마지막[]$
    • 숫자 0-9
    • 영문 a-b A-B
    • 한글 가-힣
    • N글자 이상 {N,}
    • a가 2글자 이상 [a]{2,}
  • String에서는 ==아닌 equals()
    String의 변수는 참조형 변수이기 때문에 값이 저장되는게 아니라 그 값의 주소가 저장된다. 따라서 ==이 아니라 equals를 이용할 것!

풀이(java)

import java.util.*;
import java.io.*;

class Solution {
    public String solution(String new_id) {
        
        //new_id 1이상 1000이하
        
        //1단계
        new_id = new_id.toLowerCase();
        //2단계
        new_id = new_id.replaceAll("[^a-z0-9-_.]", "");
        //3단계
        new_id = new_id.replaceAll("[.]{2,}", ".");
        //4단계
        new_id = new_id.replaceAll("^[.]|[.]$", "");
        //5단계
        if(new_id.equals("")) new_id="a";
        //6단계
        if(new_id.length()>15){
         new_id=new_id.substring(0,15);
         new_id = new_id.replaceAll("[.]$", "");
        }
        //7단계
        if(new_id.length()<=2){
            String final_s = new_id.charAt(new_id.length()-1)+"";
            while(new_id.length()<3){
                new_id=new_id+final_s;
            }
        }
        
        String answer = new_id;
        return answer;
    }
    

    
    
}
profile
꾸준하게 Ready, Set, Go!

0개의 댓글