✔ 신규 아이디 추천
문제 분석하기
정규표현식을 이용해 아이디가 아이디 규칙에 맞는지 검사한 후, 규칙에 맞지 않을 경우 규칙에 맞는 새로운 아이디를 추천
규칙1) 모든 대문자를 소문자로 치환
규칙2) 소문자, 숫자, 빼기, 밑줄, 마침표를 제외한 모든 문자 제거
규칙3) 마침표가 2번 이상 연속된 부분은 하나의 마침표로 치환
규칙4) 마침표가 처음이나 끝에 위치한다면 제거
규칙5) 빈 문자열이라면 a를 대입
규칙6) 길이가 16자 이상이라면, 첫 15개의 문자를 제외한 나머지 문자들 모두 제거. 이때 마침표가 끝에 위치한다면 마침표 제거
규칙7) 길이가 2자 이하라면 마지막 문자를 길이가 3이 될 때까지 반복해서 붙임
손으로 풀어보기
- 아이디를 7개의 규칙에 따라 맞는지 검사한 후, 규칙에 맞지 않을 경우 새로운 아이디로 변경
- 모든 대문자를 소문자로 치환
- 소문자, 숫자, 빼기, 밑줄, 마침표를 제외한 모든 문자 제거
- 마침표가 2번 이상 연속된 부분은 하나의 마침표로 치환
- 마침표가 처음이나 끝에 위치한다면 제거
- 빈 문자열이라면 a를 대입
- 길이가 16자 이상이라면, 첫 15개의 문자를 제외한 나머지 문자들 모두 제거
이때 마침표가 끝에 위치한다면 마침표 제거 - 길이가 2자 이하라면 마지막 문자를 길이가 3이 될 때까지 반복해서 붙임
- 아이디를 반환
슈도코드 작성하기
new_id(신규 유저가 입력한 아이디)
answer(7단계의 처리 과정을 거친 후의 추천 아이디)
answer을 모두 소문자로 치환 (규칙1)
answer에서 정규표현식을 통해 소문자, 숫자, 빼기, 밑줄, 마침표를 제외한 모든 문자 제거 (규칙2)
answer에서 정규표현식을 통해 마침표가 2번 이상 연속된 부분은 하나의 마침표로 치환 (규칙3)
answer에서 정규표현식을 통해 마침표가 처음이나 끝에 위치한다면 제거 (규칙4)
answer이 빈 문자라면 a를 대입 (규칙5)
answer의 길이가 16 이상이라면, 첫 15개의 문자만 남기고 제거한 후 마침표가 끝에 위치한다면 제거 (규칙6)
answer의 길이가 2 이하라면, 길이가 3이 될 때까지 마지막 문자를 반복해서 붙임 (규칙7)
answer 반환
코드 구현하기
/**
* 72410) 신규_아이디_추천
*/
public class L046_72410 {
// new_id(신규 유저가 입력한 아이디)
public String solution(String new_id) {
// answer(7단계의 처리 과정을 거친 후의 추천 아이디)
String answer = new_id;
// answer을 모두 소문자로 치환 (규칙1)
answer = answer.toLowerCase();
// answer에서 정규표현식을 통해 소문자, 숫자, 빼기, 밑줄, 마침표를 제외한 모든 문자 제거 (규칙2)
answer = answer.replaceAll("[^a-z0-9-_.]", "");
// answer에서 정규표현식을 통해 마침표가 2번 이상 연속된 부분은 하나의 마침표로 치환 (규칙3)
answer = answer.replaceAll("[.]{2,}", ".");
// answer에서 정규표현식을 통해 마침표가 처음이나 끝에 위치한다면 제거 (규칙4)
answer = answer.replaceAll("^[.]|[.]$", "");
// answer이 빈 문자라면 a를 대입 (규칙5)
if (answer.equals(""))
answer += "a";
// answer의 길이가 16 이상이라면, 첫 15개의 문자만 남기고 제거한 후 마침표가 끝에 위치한다면 제거 (규칙6)
if (answer.length() >= 16) {
answer = answer.substring(0, 15);
answer = answer.replaceAll("[.]$", "");
}
// answer의 길이가 2 이하라면, 길이가 3이 될 때까지 마지막 문자를 반복해서 붙임 (규칙7)
while (answer.length() < 3) {
answer += answer.charAt(answer.length() - 1);
}
// answer 반환
return answer;
}
// 테스트 케이스
public static void main(String[] args) {
L046_72410 solution = new L046_72410();
String new_id = "...!@BaT#*..y.abcdefghijklm";
String result = solution.solution(new_id);
System.out.println(result);
}
}
'Coding Test > Java 알고리즘 실전' 카테고리의 다른 글
[250121] 데이터 분석 (0) | 2024.01.02 |
---|---|
[76501] 음양 더하기 (0) | 2024.01.01 |
[70128] 내적 (0) | 2024.01.01 |
[68935] 3진법 뒤집기 (0) | 2023.12.31 |
[68644] 두 개 뽑아서 더하기 (0) | 2023.12.31 |