코린이의 소소한 공부노트

[프로그래머스/Lv.1] 신규 아이디 추천 본문

코딩테스트 풀이/JAVA

[프로그래머스/Lv.1] 신규 아이디 추천

무지맘 2022. 11. 15. 02:06

 1. Input

1) 신규 유저가 입력한 아이디가 new_id

 

2. Output

1) 아이디 규칙 7단계를 거친 후의 추천 id를 담은 String 변수

 

3. Constraint

1) new_id는 길이 1 이상 1,000 이하인 문자열

2) new_id는 알파벳 대문자, 알파벳 소문자, 숫자, 특수문자로 구성되어 있다.

3) new_id에 나타날 수 있는 특수문자는 -_.~!@#$%^&*()=+[{]}:?,<>/ 로 한정된다.

4) 아이디 규칙 7단계

1단계: new_id의 모든 대문자를 소문자로 치환

2단계: new_id에서 알파벳 소문자, 숫자, 빼기(-), 밑줄(_), 마침표(.)를 제외한 모든 문자 제거

3단계: new_id에서 마침표(.)2번 이상 연속된 부분을 하나의 마침표(.)로 치환

4단계: new_id에서 마침표(.)가 처음이나 끝에 위치한다면 제거

5단계: new_id가 빈 문자열이라면, new_id"a"를 대입

6단계: new_id의 길이가 16자 이상이면, new_id의 첫 15개의 문자를 제외한 나머지 문자들을 모두 제거

  - 만약 제거 후 마침표(.)new_id의 끝에 위치한다면 끝에 위치한 마침표(.) 문자를 제거

7단계: new_id의 길이가 2자 이하라면, new_id의 마지막 문자를 new_id의 길이가 3이 될 때까지 반복해서 끝에 붙인다.

 

4. Example

Input: new_id="z-+.^." -> Output: "z--“

설명:

1단계: 변화 없음

2단계: "z-+.^." → +^ 제거 → "z-.."

3단계: "z-.." → 연속 마침표 1개로 치환 → "z-."

4단계: "z-." → 맨 끝 마침표 제거 → "z-"

5단계: 변화 없음

6단계: 변화 없음

7단계: "z-" → 길이가 2이므로 마지막 문자 1번 추가 → "z--"

 

5. Code

1) 첫 코드(2022/??)

String answer = new_id;
// 1. 모두 소문자로
answer = answer.toLowerCase();
// 2. 알파벳, 숫자, -, _, . 빼고 다 삭제
answer = answer.replaceAll("[^a-z0-9-_.]", "");
// 3. .가 2번 이상 -> 1개로 치환
answer = answer.replaceAll("\\.+", ".");
// 4. .가 처음 or 끝 -> 제거
if(answer.charAt(0) == '.') answer = answer.substring(1);
if(answer.length()!=0 && (answer.charAt(answer.length()-1)) == '.')
    answer = answer.substring(0, answer.length()-1);
// 5. 빈 문자열 -> new_id에 "a" 대입
if(answer.length() == 0) answer = "a";
// 6. 16자 이상 -> 15개의 문자만 남김. .가 끝 -> 제거
if(answer.length() > 15) {
    answer = answer.substring(0, 15);
    if(answer.charAt(14) == '.')
        answer = answer.substring(0, 14);
}
// 7. 2자 이하 -> 마지막 문자를 길이가 3이 될 때까지 반복해서 끝에 붙임
while(answer.length() <3) 
    answer += answer.charAt(answer.length()-1);
return answer;