본문 바로가기
카테고리 없음

프로그래머스 - Lv.1 신규아이디추천 자바

by 윤뇽뇽

 

프로그래머스

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

programmers.co.kr

1. SOLUTION

정규표현식을 사용해서 차근차근 구현해주면 된다.

근데 정규표현식을 잘 몰라서(...) 공부하면서 풀었음...ㅋ

생각해보면 파이썬이나 자바스크립트로도 정규표현식을 사용해본 적이 거의 없는것같다.

자주사용되는 정규 표현식 문법은 다음과 같다. 자유롭게 사용할 수 있을 정도로 알아두는 게 좋을듯!

정규 표현식 설명
^ 문자열 시작, [] 안에 있을 경우 부정의 의미로 사용
$ $ 앞의 문자열로 종료되는지 판단
. 임의의 문자 1개 (단 \은 넣을 수 없음)
* 앞 문자가 없거나 있거나 (여러 개 있을 수도 있음)
+ 앞 문자가 1개 이상
? 앞 문자가 없거나 1개 있음
[ ]  [] 안의 문자가 있는지 확인, 두 문자 사이는 - 기호로 범위를 나타냄. [] 내에서 ^ 가 존재하면 not을 나타낸다.
{ }  문자의 개수를 나타냄
( ) 소괄호 안의 문자를 하나의 문자로 인식 (그룹)
| or 연산
\ 정규 표현식 역슬래시(\)는 확장문자 (역슬래시 다음에 일반 문자가 오면 특수문자로 취급하고 역슬래시 다음에 특수문자가 오면 그 문자 자체를 의미)

2. CODE

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("^(\\.)|(\\.)$", "");
        // new_id가 빈 문자열이면 new_id = 'a'
        if (new_id.length() == 0) 
            new_id += 'a';
        // 16자 이상이면 첫 15개 문자만 남기고 모두 공백으로 변경, '.'가 마지막이라면 '.'까지 공백으로 변경
        if (new_id.length() >= 16) {
            new_id = new_id.substring(0, 15).replaceAll("(\\.)$", "");
        }
        // 2자 이하면 마지막 문자를 길이가 3이 될때까지 추가해주기
        while(new_id.length() < 3) {
            new_id += new_id.charAt(new_id.length() - 1);
        }
        
        return new_id;
    }
}

댓글